MySQL VARCHAR 유형의 최대 크기가 무엇인지 알고 싶습니다.
최대 크기가 약 65k 인 행 크기에 의해 제한된다는 것을 읽었습니다. 필드를 설정하려고 시도했지만 varchar(20000)
너무 큽니다.
로 설정할 수 varchar(10000)
있습니다. 설정할 수있는 최대 값은 얼마입니까?
MySQL VARCHAR 유형의 최대 크기가 무엇인지 알고 싶습니다.
최대 크기가 약 65k 인 행 크기에 의해 제한된다는 것을 읽었습니다. 필드를 설정하려고 시도했지만 varchar(20000)
너무 큽니다.
로 설정할 수 varchar(10000)
있습니다. 설정할 수있는 최대 값은 얼마입니까?
답변:
MySQL에는 최대 행 크기 제한이 있습니다.
MySQL 테이블의 내부 표현은 최대 행 크기 제한이 65,535 바이트이며 BLOB 및 TEXT 유형은 계산하지 않습니다. BLOB 및 TEXT 열은 내용이 나머지 행과 별도로 저장되므로 행 크기 제한에 9-12 바이트 만 기여합니다. 더 읽어보기테이블 열 수 및 행 크기 제한에 .
단일 열이 차지할 수있는 최대 크기는 MySQL 5.0.3 이전과 이후에 다릅니다.
VARCHAR 열의 값은 가변 길이 문자열입니다. 길이는 MySQL 5.0.3 이전에는 0에서 255 사이의 값으로, 5.0.3 이상에서는 0에서 65,535 사이의 값으로 지정할 수 있습니다 . MySQL 5.0.3 이상에서 VARCHAR의 유효 최대 길이는 최대 행 크기 (모든 열간에 공유되는 65,535 바이트) 및 사용 된 문자 세트에 따라 달라집니다.
그러나 utf8 또는 utf8mb4와 같은 멀티 바이트 문자 집합을 사용하는 경우 제한이 더 낮습니다.
TEXT
행 크기 제한을 극복 하려면 유형을 순서대로 사용하십시오 .
네 가지 텍스트 유형은 TINYTEXT, TEXT, MEDIUMTEXT 및 LONGTEXT입니다. 이들은 4 개의 BLOB 유형에 해당하며 최대 길이 및 스토리지 요구 사항이 동일합니다.
BLOB 및 TEXT 유형에 대한 자세한 내용
더 나아가
모든 데이터 유형에 대한 스토리지 요구 사항 을 다루는 데이터 유형 스토리지 요구 사항에 대한 자세한 내용을 확인하십시오 .
당으로 온라인 문서 하는 64K 행 제한이 당신은 사용하여 행 크기를 사용할 수 있습니다 :
row length = 1
+ (sum of column lengths)
+ (number of NULL columns + delete_flag + 7)/8
+ (number of variable-length columns)
열 길이는 크기의 일대일 매핑이 아님을 명심해야합니다. 예를 들어, CHAR(10) CHARACTER SET utf8
특정 인코딩은 문자 당 3 바이트 속성 utf8
(즉, "실제"UTF-8이 아닌 MySQL의 utf8
인코딩 이며 최대 4 바이트를 가질 수 있음)을 설명해야하기 때문에 10 개의 문자 각각에 대해 3 바이트가 필요 합니다. ).
그러나 행 크기가 64K에 가까워지면 데이터베이스의 스키마를 검사 할 수 있습니다. 적절하게 설정된 (3NF) 데이터베이스에서 넓어야하는 드문 테이블입니다 . 일반적이지는 않지만 가능합니다 .
그 이상을 사용하려면 BLOB
또는TEXT
유형을 있습니다. 64K 행 한도 (작은 관리 공간 제외)에는 포함되지 않지만 특정 숫자 이상으로 전체 텍스트 블록을 사용하여 정렬 할 수없는 등 사용으로 인해 발생하는 다른 문제를 알고 있어야합니다. 문자를 사용하여 (위쪽으로 구성 할 수 있음) 임시 테이블이 메모리가 아닌 디스크에 있어야하거나 크기를 효율적으로 처리하기 위해 클라이언트 및 서버 통신 버퍼를 구성해야합니다.
허용되는 크기는 다음과 같습니다.
TINYTEXT 255 (+1 byte overhead)
TEXT 64K - 1 (+2 bytes overhead)
MEDIUMTEXT 16M - 1 (+3 bytes overhead)
LONGTEXT 4G - 1 (+4 bytes overhead)
여전히 바이트 / 문자 불일치 ( MEDIUMTEXT utf8
열이 약 50 만 문자 만 저장할 수 있도록 (16M-1)/3 = 5,592,405
)가 있지만 범위를 크게 확장합니다.
utf8mb4
해야합니다 . utf8mb4
MySql은 나머지 단어가 utf8이라고 부르는 이름입니다.
varchar의 최대 길이는 MySQL의 최대 행 크기에 따라 64KB (BLOB 계산 안 함)입니다.
VARCHAR (65535) 그러나 멀티 바이트 문자 세트를 사용하는 경우 한계가 더 낮습니다.
VARCHAR (21844) 문자 세트 utf8
CHARACTER SET utf8
예제에서 사용 을 중지하십시오 . 그것은해야한다 CHARACTER SET utf8mb4
(당신이 원하는 경우 모든 유니 코드 텍스트가 제대로 저장 될 ... 그리고 누가 그것을 원하지하지 않는 이유는 무엇입니까?)
CHARSET=utf8mb4
사용 VARCHAR(16383)
.
MySQL 문서에서 :
MySQL 5.0.3 이상에서 VARCHAR의 유효 최대 길이는 최대 행 크기 (모든 열에서 공유되는 65,535 바이트) 및 사용 된 문자 세트에 따라 달라집니다. 예를 들어, utf8 문자는 문자 당 최대 3 바이트를 요구할 수 있으므로 utf8 문자 세트를 사용하는 VARCHAR 컬럼은 최대 21,844 자로 선언 될 수 있습니다.
VARCHAR의 한계는 사용 된 문자 세트에 따라 다릅니다. ASCII를 사용하면 문자 당 1 바이트가 사용됩니다. 65,535자를 저장할 수 있다는 의미입니다. utf8을 사용하면 문자 당 3 바이트를 사용하여 문자 제한이 21,844가됩니다. 그러나 최신 멀티 바이트 문자 세트 utf8mb4를 사용하는 경우 사용해야합니다! 이모 지 및 기타 특수 문자를 지원합니다. 문자 당 4 바이트를 사용합니다. 이것은 테이블 당 문자 수를 16,383으로 제한합니다. INT와 같은 다른 필드도 이러한 제한으로 계산됩니다.
결론:
utf8 최대 21,844 자
utf8mb4 최대 16,383 자
Mysql 버전 5.0.3 이전에는 Varchar 데이터 유형에 255자를 저장할 수 있지만 5.0.3부터 65,535자를 저장할 수 있습니다.
그러나 최대 행 크기는 65,535 바이트로 제한됩니다. 모든 열을 포함하면 65,535 바이트를 넘지 않아야합니다.
귀하의 경우 10000 이상을 설정하려고 할 때 65,535 이상을 초과하고 mysql이 오류를 줄 수 있습니다.
자세한 정보 : https://dev.mysql.com/doc/refman/5.0/en/column-count-limit.html
예를 들어 블로그 : http://goo.gl/Hli6G3