[mysql] MySQL VARCHAR 최대 크기는 얼마입니까?

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)가 있지만 범위를 크게 확장합니다.


답변

출처

varchar의 최대 길이는 MySQL의 최대 행 크기에 따라 64KB (BLOB 계산 안 함)입니다.

VARCHAR (65535) 그러나 멀티 바이트 문자 세트를 사용하는 경우 한계가 더 낮습니다.

VARCHAR (21844) 문자 세트 utf8


답변

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


답변

MEDIUMBLOB / LONGBLOB 또는 MEDIUMTEXT / LONGTEXT를 사용할 수도 있습니다

MySQL의 BLOB 유형은 최대 65,534 바이트를 저장할 수 있습니다. 이보다 많은 양의 데이터를 저장하려고하면 MySQL이 데이터를 자릅니다. MEDIUMBLOB는 최대 16,777,213 바이트를 저장할 수 있으며 LONGBLOB는 최대 4,294,967,292 바이트를 저장할 수 있습니다.


답변

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


답변

64KB로 제한되지 않는 TEXTtype 을 사용할 수 있습니다 .