MySQL의 varchar (max)와 동일합니까?


답변:


195

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)

20
나는 또한 TEXT를 사용하는 것이 좋습니다
Adi

2
@AdnanShammout : DEFAULT열의 값 을 선언하지 않는 한 물론 입니다. TEXT 또는 BLOB 유형으로는 그렇게 할 수 없습니다.
Bill Karwin 2016 년

5
@DanW, TEXT길이 제한은 64K입니다. MEDIUMTEXT길이 제한은 16M입니다. LONGTEXT길이 제한은 4G입니다.
Bill Karwin

4
이것의 가장 큰 문제는 해당 크기의 열을 만들면 테이블에 하나의 열만 가질 수 있다는 입니다. MySql 의 MAX 행 크기는 64k이므로 64k 열이 있으면 그게 전부입니다. SQL Server의 varchar(max)열 유형 에는 이와 동일한 제약 조건이 적용되지 않습니다 .
joshperry

1
@joshperry, 그렇습니다. 그러나 TEXT / BLOB 열은 해당 64KB 행 크기 제한에 대해 소량 (9-12 바이트)으로 만 계산되므로 많은 다른 열뿐만 아니라 많은 VARCHAR이 필요한 경우 TEXT를 사용하는 것이 좋습니다.
Bill Karwin

74

TLDR; MySql에는에 해당하는 개념이 없으며 varchar(max)이는 MS SQL Server 기능입니다.

VARCHAR (max)는 무엇입니까?

varchar(max) Microsoft SQL Server의 기능입니다.

버전 2005 이전의 열이 Microsoft SQL Server 버전에 저장할 수있는 데이터 양은 8KB로 제한되었습니다. 8KB 이상을 저장하기 위해 , 또는 열 유형 을 사용해야하는 TEXT경우 ,이 열 유형은 데이터를 테이블 데이터 페이지와 별도로 8K 페이지의 콜렉션으로 저장했습니다. 행당 최대 2GB의 저장을 지원했습니다.NTEXTBLOB

이러한 열 유형에 큰주의해야 할 점은 그들은 일반적으로 (예를 들어, 액세스 특수 기능 및 진술을 요구하고 데이터를 수정하는 것이 있었다 READTEXT, WRITETEXT그리고 UPDATETEXT)

SQL Server 2005에서는 varchar(max)큰 열의 데이터를 검색하고 수정하는 데 사용되는 데이터와 쿼리를 통합하기 위해 도입되었습니다. varchar(max)열의 데이터 는 테이블 데이터 페이지와 나란히 저장됩니다.

MAX 열의 데이터가 8KB 데이터 페이지를 채우면 오버플로 페이지가 할당되고 이전 페이지가 링크 된 목록을 형성하는 페이지를 가리 킵니다. 달리 TEXT, NTEXT및 컬럼 유형은 다른 열 유형과 같은 질의 의미론은 모두 지원한다.BLOBvarchar(max)

그래서 varchar(MAX)정말 의미 varchar(AS_MUCH_AS_I_WANT_TO_STUFF_IN_HERE_JUST_KEEP_GROWING)하지 varchar(MAX_SIZE_OF_A_COLUMN).

MySql에는 동등한 관용구가 없습니다.

varchar(max)MySql에서 와 동일한 양의 스토리지를 얻으 려면 여전히 BLOB열 유형 을 사용해야 합니다. 이 문서 에서는 MySql에 대량의 데이터를 효율적으로 저장하는 매우 효과적인 방법에 대해 설명합니다.


1
이것은 MySQL보다 SQL Server와 더 관련이 있습니다.
커밋

14
@njk 예. 그러나 MySql에서 "동등한"(또는이 경우에는 동등한 것이 없음) 설명을 위해 varchar(max) 실제로 의미 하는 바를 정확히 설명해야했습니다 .
joshperry

29

varchar의 최대 길이는

65535

열이 설정된 문자 세트에서 문자의 최대 바이트 길이로 나눈 값 (예 : utf8 = 3 바이트, ucs2 = 2, latin1 = 1)

길이를 저장할 빼기 2 바이트

다른 모든 열의 길이를 뺀

Null을 허용하는 8 개의 열마다 1 바이트를 뺀 값입니다. 열이 널 / 널 (null)이 아닌 경우 널 마스크 (null mask)라고하는 바이트 / 바이트에서 1 비트로 저장됩니다 (널당 1 비트는 널 입력 가능).


나는 당신의 답변 형식을 좋아하지만 가장 좋은 답변이 문자셋과 물건에 관해 제공하는 유용한 정보가 빠져있는 것 같습니다
Joe Phillips

3

SQL Server의 경우

테이블 변경 prg_ar_report_colors add Text_Color_Code VARCHAR (max);

MySql의 경우

prg_ar_report_colors 테이블을 변경하십시오. Text_Color_Code longtext를 추가하십시오.

오라클

테이블 prg_ar_report_colors 변경 text_Color_Code CLOB 추가;


1
longtext, text 및 blob은 varchar와 다르게 저장됩니다. varchar는 다른 필드와 함께 저장되고 텍스트는 서버의 별도 파일에 저장됩니다. 어느 쪽을 선택
해야하는지

0

제한 크기 미만일 때 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>

-11

MySQL 5.6.12에서 varchar의 최대 길이는 4294967295입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.