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


300

MySQL VARCHAR 유형의 최대 크기가 무엇인지 알고 싶습니다.

최대 크기가 약 65k 인 행 크기에 의해 제한된다는 것을 읽었습니다. 필드를 설정하려고 시도했지만 varchar(20000)너무 큽니다.

로 설정할 수 varchar(10000)있습니다. 설정할 수있는 최대 값은 얼마입니까?


1
세부 블로그 : goo.gl/Hli6G3
Suresh Kamrushi

답변:


293

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 유형에 대한 자세한 내용

더 나아가

모든 데이터 유형에 대한 스토리지 요구 사항 을 다루는 데이터 유형 스토리지 요구 사항에 대한 자세한 내용을 확인하십시오 .


4
"긴"문자열은 무엇입니까?
Richard H

6
TEXT 열은 존재하거나 정렬 할 때 임시 테이블이 생성 될 수 있으므로 TEXT 열을 피하려고합니다.
Robert Swisher

1
이름에 varchar (200)을 사용 하고이 필드에 6 문자 만 저장하면 이름이 몇 바이트입니까?
Paresh Gami

2
@PareshGami-6 + 1 = 7 자! CHAR과 달리 VARCHAR 값은 1 바이트 또는 2 바이트 길이 접두사 + 데이터로 저장됩니다. 자세히 ...
rajukoyilandy

58

당으로 온라인 문서 하는 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)가 있지만 범위를 크게 확장합니다.


4
TEXT 유형은 메모리 테이블에 저장할 수 없으므로 VARCHAR로 충분할 때이를 사용하면 성능이 크게 저하됩니다.
Camden S.

MySql utf8의 '문자 당 3 바이트 속성' utf8 은 실제로 utf8이 아닙니다. 실제로 최대. utf-8 char의 바이트4 입니다. 이러한 이유로 항상 MySQL 에서 인코딩을 설정utf8mb4 해야합니다 . utf8mb4MySql은 나머지 단어가 utf8이라고 부르는 이름입니다.
Stijn de Witt

1
@StijndeWitt 감사합니다. UTF-8 대신 MySQL의 utf8 인코딩 방법을 의미했음을 나타냅니다. 나는 일반적으로 대문자로 된 변형을 사용하여 "실제"UTF-8을 표시합니다. 이것이 허용되는 IANA 규칙이기 때문입니다.
paxdiablo

41

출처

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

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

VARCHAR (21844) 문자 세트 utf8


20
CHARACTER SET utf8예제에서 사용 을 중지하십시오 . 그것은해야한다 CHARACTER SET utf8mb4(당신이 원하는 경우 모든 유니 코드 텍스트가 제대로 저장 될 ... 그리고 누가 그것을 원하지하지 않는 이유는 무엇입니까?)
스테인 드 위트

4
위해 CHARSET=utf8mb4사용 VARCHAR(16383).
Wil Moore III

3
utf8mb4를 사용하면 utf8이 아닌 상황에서 색인 너비 제한에 대비할 수 있습니다. utf8mb4에는 포함되어 있지만 utf8에는 포함되지 않은 문자 세트를 검사하는 경우 다양한 형태의 상형 문자 및 기타 비전 문자 세트를 모두 포함하면 상당한 성능 저하가 발생할 수 있습니다 (경험적으로 결정됨). Stijn이 암시하는 것처럼 잘 랐고 건조하지 않았습니다.
kcrossen

많은 이모티콘이 utf8mb4에도 존재하고 utf8에서 누락되어 가치가 있는지 여부에 대한 방정식이 변경 될 수 있습니다.
Brian Morearty

23

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


6

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

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


3

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


-5

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


31
이것은 질문에 대답하지 않습니다.
DreamWave

1
귀하의 답변은 질문과 관련이 없습니다.
Girish
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.