답변:
varchar의 최대 길이는 MySQL의 최대 행 크기에 따라 달라지며 64KB (BLOB 계산 안 함)입니다.
VARCHAR(65535)
그러나 멀티 바이트 문자 집합을 사용하는 경우 제한이 줄어 듭니다.
VARCHAR(21844) CHARACTER SET utf8
여기 몇 가지 예가 있어요.
최대 행 크기는 65535이지만 varchar에는 주어진 문자열의 길이를 인코딩하기 위해 한두 바이트가 포함됩니다. 따라서 실제로 테이블의 유일한 열인 경우에도 최대 행 크기의 varchar를 선언 할 수 없습니다.
mysql> CREATE TABLE foo ( v VARCHAR(65534) );
ERROR 1118 (42000): Row size too large. The maximum row size for the used table type, not counting BLOBs, is 65535. This includes storage overhead, check the manual. You have to change some columns to TEXT or BLOBs
그러나 길이를 줄이면 가장 큰 길이를 찾을 수 있습니다.
mysql> CREATE TABLE foo ( v VARCHAR(65532) );
Query OK, 0 rows affected (0.01 sec)
이제 테이블 수준에서 멀티 바이트 문자 집합을 사용하려고하면 각 문자를 여러 바이트로 계산합니다. UTF8 문자열은 문자열 당 여러 바이트를 반드시 사용할 필요 는 없지만 MySQL은 향후 모든 삽입을 단일 바이트 문자로 제한한다고 가정 할 수 없습니다.
mysql> CREATE TABLE foo ( v VARCHAR(65532) ) CHARSET=utf8;
ERROR 1074 (42000): Column length too big for column 'v' (max = 21845); use BLOB or TEXT instead
마지막 오류가 말 했음에도 불구하고 InnoDB는 여전히 21845의 길이를 좋아하지 않습니다.
mysql> CREATE TABLE foo ( v VARCHAR(21845) ) CHARSET=utf8;
ERROR 1118 (42000): Row size too large. The maximum row size for the used table type, not counting BLOBs, is 65535. This includes storage overhead, check the manual. You have to change some columns to TEXT or BLOBs
21845 * 3 = 65535로 계산하면 어쨌든 효과가 없었습니다. 21844 * 3 = 65532 인 반면 작동합니다.
mysql> CREATE TABLE foo ( v VARCHAR(21844) ) CHARSET=utf8;
Query OK, 0 rows affected (0.32 sec)
DEFAULT
열의 값 을 선언하지 않는 한 물론 입니다. TEXT 또는 BLOB 유형으로는 그렇게 할 수 없습니다.
TEXT
길이 제한은 64K입니다. MEDIUMTEXT
길이 제한은 16M입니다. LONGTEXT
길이 제한은 4G입니다.
varchar(max)
열 유형 에는 이와 동일한 제약 조건이 적용되지 않습니다 .
TLDR; MySql에는에 해당하는 개념이 없으며 varchar(max)
이는 MS SQL Server 기능입니다.
varchar(max)
Microsoft SQL Server의 기능입니다.
버전 2005 이전의 열이 Microsoft SQL Server 버전에 저장할 수있는 데이터 양은 8KB로 제한되었습니다. 8KB 이상을 저장하기 위해 , 또는 열 유형 을 사용해야하는 TEXT
경우 ,이 열 유형은 데이터를 테이블 데이터 페이지와 별도로 8K 페이지의 콜렉션으로 저장했습니다. 행당 최대 2GB의 저장을 지원했습니다.NTEXT
BLOB
이러한 열 유형에 큰주의해야 할 점은 그들은 일반적으로 (예를 들어, 액세스 특수 기능 및 진술을 요구하고 데이터를 수정하는 것이 있었다 READTEXT
, WRITETEXT
그리고 UPDATETEXT
)
SQL Server 2005에서는 varchar(max)
큰 열의 데이터를 검색하고 수정하는 데 사용되는 데이터와 쿼리를 통합하기 위해 도입되었습니다. varchar(max)
열의 데이터 는 테이블 데이터 페이지와 나란히 저장됩니다.
MAX 열의 데이터가 8KB 데이터 페이지를 채우면 오버플로 페이지가 할당되고 이전 페이지가 링크 된 목록을 형성하는 페이지를 가리 킵니다. 달리 TEXT
, NTEXT
및 컬럼 유형은 다른 열 유형과 같은 질의 의미론은 모두 지원한다.BLOB
varchar(max)
그래서 varchar(MAX)
정말 의미 varchar(AS_MUCH_AS_I_WANT_TO_STUFF_IN_HERE_JUST_KEEP_GROWING)
하지 varchar(MAX_SIZE_OF_A_COLUMN)
.
varchar(max)
MySql에서 와 동일한 양의 스토리지를 얻으 려면 여전히 BLOB
열 유형 을 사용해야 합니다. 이 문서 에서는 MySql에 대량의 데이터를 효율적으로 저장하는 매우 효과적인 방법에 대해 설명합니다.
varchar(max)
실제로 의미 하는 바를 정확히 설명해야했습니다 .
varchar의 최대 길이는
65535
열이 설정된 문자 세트에서 문자의 최대 바이트 길이로 나눈 값 (예 : utf8 = 3 바이트, ucs2 = 2, latin1 = 1)
길이를 저장할 빼기 2 바이트
다른 모든 열의 길이를 뺀
Null을 허용하는 8 개의 열마다 1 바이트를 뺀 값입니다. 열이 널 / 널 (null)이 아닌 경우 널 마스크 (null mask)라고하는 바이트 / 바이트에서 1 비트로 저장됩니다 (널당 1 비트는 널 입력 가능).
테이블 변경 prg_ar_report_colors add Text_Color_Code VARCHAR (max);
prg_ar_report_colors 테이블을 변경하십시오. Text_Color_Code longtext를 추가하십시오.
테이블 prg_ar_report_colors 변경 text_Color_Code CLOB 추가;
제한 크기 미만일 때 VARCHAR에서 TEXT로 열 변환 중 !!!
mysql> CREATE TABLE varchars1(ch3 varchar(6),ch1 varchar(3),ch varchar(4000000))
;
Query OK, 0 rows affected, 1 warning (0.00 sec)
mysql> SHOW WARNINGS;
+-------+------+---------------------------------------------+
| Level | Code | Message |
+-------+------+---------------------------------------------+
| Note | 1246 | Converting column 'ch' from VARCHAR to TEXT |
+-------+------+---------------------------------------------+
1 row in set (0.00 sec)
mysql>