2011-11-10 5 views
2

나는 국제적인 웹 사이트를 개설해야한다. 기사라는 표가 있다고 가정 해 봅시다 :단일 행에 TEXT 필드에 대한 제한이 있습니까?

articleID | data | text_EN | text_FR | text_DE | text_ES 

하나의 행에 텍스트의 번역 된 버전이 포함되어 있습니다. 각 언어의 각 텍스트 필드가 약 1500 자임을 고려하면 mysql이 이러한 테이블을 관리하는 데 문제가있을 수 있습니까?

공간이 단일 행을 차지할 수있는 정도에 하드 한도가 있다고 들었습니다.

+2

다른 언어를 추가해야 할 때 어떻게됩니까? 너 테이블 바꿔? –

+0

예 ..이 방법은 각 레코드에 대해 1 개 언어를 포함하는 테이블을 가진 JOIN보다 간단한 쿼리를 가질 수 있습니다. –

+0

이렇게하면 앱을 디자인하는 것은 좋지 않은 접근 방식입니다. –

답변

1

이 (이노 IIRC에 대한 8K 주위의 MyISAM에 대한 64K)의 MySQL의 행 크기 제한이 실제로이지만 TEXT 또는 BLOB 필드를 사용하는 경우 그 문제가 많이하지 않습니다.

이러한 필드는 실제로 포인터이며 데이터 자체는 행 외부에 저장됩니다. 각 TEXT 필드는 storage requirements에 따라 9-12 바이트의 행 공간 만 차지합니다.

즉, 기사 번역은 열 대신 행에 저장하는 것이 좋습니다.

+0

완벽하기 때문에 내 경우에는 어떤 한계도 직면하지 않겠습니까? – dynamic

+1

5 개의'text_XX' 필드는 최대 60 바이트의 행 스토리지를 사용하기 때문에 아마 그렇지 않을 것입니다. –

0

행 길이 제한을 설명하는 것은 복잡합니다. 자세한 내용은이 블로그를 참조하십시오 : Blob Storage in InnoDB.

하지만 그와 같은 열에 텍스트를 저장하지 않는 것이 좋습니다. 행 대신에 보관 :

CREATE TABLE Article (
    articeID INT NOT NULL AUTO_INCREMENT, 
    language CHAR(2) NOT NULL, 
    article_text TEXT, 
    PRIMARY KEY (articleID, language) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8; 
+0

이 특정 테이블은 나를 위해 일할 수 없습니다. 왜냐하면 언어에서 다른 필드를 너무 저장해야하기 때문에 중복이 발생할 수 있습니다. 스키마를 정규화하려면 번역 된 텍스트 만 포함 된 두 번째 테이블을 만들어야하지만 더 복잡한 쿼리가 발생하며 가능한 쿼리를 간단하게 만들고 싶습니다. – dynamic

관련 문제