Loading...
MySQL 9.5 Reference Manual 9.5의 13.3.1 String Data Type Syntax의 한국어 번역본입니다.
아래의 경우에 피드백에서 신고해주신다면 반영하겠습니다.
감사합니다 :)
String 데이터 타입에는 CHAR,
VARCHAR,
BINARY,
VARBINARY,
BLOB,
TEXT,
ENUM,
SET가 있습니다.
일부 경우, MySQL은 CREATE TABLE 또는 ALTER TABLE
문에서 지정한 것과는 다른 타입으로 string 컬럼을 변경할 수 있습니다. Section 15.1.24.7, “Silent Column Specification Changes”를 참조하십시오.
Character string 컬럼
(CHAR,
VARCHAR, 및
TEXT 타입)에 대한 정의의 경우, MySQL은 길이 지정값을 character 단위로 해석합니다. Binary string 컬럼
(BINARY,
VARBINARY, 및
BLOB 타입)에 대한 정의의 경우, MySQL은 길이 지정값을 바이트 단위로 해석합니다.
Character string 데이터 타입
CHAR,
VARCHAR,
TEXT 타입,
ENUM,
SET 및 이들의 synonym에 대한 컬럼 정의에서는 컬럼 character set과 collation을 지정할 수 있습니다:
CHARACTER SET은 character set을 지정합니다. 원하는 경우, COLLATE 속성을 사용하여 해당 character set에 대한 collation을 다른 속성과 함께 지정할 수 있습니다. 예를 들면 다음과 같습니다:1CREATE TABLE t 2( 3 c1 VARCHAR(20) CHARACTER SET utf8mb4, 4 c2 TEXT CHARACTER SET latin1 COLLATE latin1_general_cs 5);
이 테이블 정의는 character set이
utf8mb4이고 해당 character set에 대한 기본 collation을 사용하는 c1이라는 컬럼과,
character set이 latin1이고 대소문자 구분(_cs) collation을 사용하는 c2라는 컬럼을 생성합니다.
CHARACTER SET과
COLLATE 속성 중 하나 또는 둘 다가 빠져 있을 때 character set과 collation을 할당하는 규칙은
Section 12.3.5, “Column Character Set and Collation”에 설명되어 있습니다.
CHARSET은
CHARACTER SET의 synonym입니다.
CHARACTER SET binary
속성을 지정하면, 해당 컬럼은 대응되는 binary string 데이터 타입으로 생성됩니다:
CHAR는
BINARY가 되고,
VARCHAR는
VARBINARY가 되며,
TEXT는
BLOB이 됩니다.
ENUM 및
SET 데이터 타입의 경우에는 이러한 변환이 발생하지 않으며, 선언된 그대로 생성됩니다. 다음과 같이 테이블을 정의한다고 가정해 봅시다:1CREATE TABLE t 2( 3 c1 VARCHAR(10) CHARACTER SET binary, 4 c2 TEXT CHARACTER SET binary, 5 c3 ENUM('a','b','c') CHARACTER SET binary 6);
결과적으로 생성되는 테이블 정의는 다음과 같습니다:
1CREATE TABLE t 2( 3 c1 VARBINARY(10), 4 c2 BLOB, 5 c3 ENUM('a','b','c') CHARACTER SET binary 6);
BINARY 속성은 표준이 아닌
MySQL 확장 기능으로, 컬럼 character set의 binary (_bin) collation
(또는 컬럼 character set이 지정되지 않은 경우 테이블 기본 character set의 binary collation)을 지정하는 축약형입니다. 이 경우 비교와 정렬은 숫자 character 코드 값에 기반합니다. 다음과 같이 테이블을 정의한다고 가정해 봅시다:1CREATE TABLE t 2( 3 c1 VARCHAR(10) CHARACTER SET latin1 BINARY, 4 c2 TEXT BINARY 5) CHARACTER SET utf8mb4;
결과적으로 생성되는 테이블 정의는 다음과 같습니다:
1CREATE TABLE t ( 2 c1 VARCHAR(10) CHARACTER SET latin1 COLLATE latin1_bin, 3 c2 TEXT CHARACTER SET utf8mb4 COLLATE utf8mb4_bin 4) CHARACTER SET utf8mb4;
MySQL 9.5에서 BINARY
속성은 deprecated 상태이며, 향후 버전의 MySQL에서 지원이 제거될 것으로 예상해야 합니다. 애플리케이션은 명시적인
_bin collation을 사용하도록 조정해야 합니다.
데이터 타입 또는 character set을 지정하기 위한 BINARY의 사용은 변경되지 않습니다.
ASCII 속성은
CHARACTER SET latin1의 축약형입니다. 예전 MySQL 릴리스에서 지원되던
ASCII는 deprecated 상태이며,
대신 CHARACTER SET을 사용해야 합니다.
UNICODE 속성은
CHARACTER SET ucs2의 축약형입니다. 예전 MySQL 릴리스에서 지원되던
UNICODE는 deprecated 상태이며,
대신 CHARACTER SET을 사용해야 합니다.
Character 컬럼 비교와 정렬은 해당 컬럼에 할당된
collation에 기반합니다.
CHAR,
VARCHAR,
TEXT,
ENUM,
SET 데이터 타입에 대해서는, 컬럼을 binary (_bin) collation 또는
BINARY 속성으로 선언하여, 비교와 정렬이 lexical ordering이 아닌 내부 character 코드 값에 기반하도록 할 수 있습니다.
MySQL에서 character set 사용에 대한 추가 정보는 Chapter 12, Character Sets, Collations, Unicode를 참조하십시오.
[NATIONAL] CHAR[(M)] [CHARACTER SET charset_name] [COLLATE collation_name]고정 길이 string으로, 저장 시 지정된 길이가 되도록 항상 오른쪽이 공백으로 패딩됩니다.
_M_은 character 단위의 컬럼 길이를 나타냅니다.
_M_의 범위는 0에서 255까지입니다.
_M_을 생략하면 길이는 1입니다.
참고
Trailing 공백은
CHAR 값을 조회할 때 제거되지만,
PAD_CHAR_TO_FULL_LENGTH
SQL 모드가 활성화된 경우는 예외입니다.
CHAR는
CHARACTER의 축약형입니다.
NATIONAL CHAR
(또는 그에 상응하는 짧은 형태인 NCHAR)는
CHAR 컬럼이 어떤 사전 정의된 character set을 사용해야 함을 정의하는 표준 SQL 방식입니다. MySQL은 이 사전 정의된 character set으로
utf8mb3를 사용합니다.
Section 12.3.7, “The National Character Set”.
CHAR BYTE 데이터 타입은
BINARY 데이터
타입의 alias입니다. 이는 호환성을 위한 기능입니다.
MySQL에서는 CHAR(0) 타입의 컬럼을 생성할 수 있습니다. 이는, 컬럼의 존재에 의존하지만 실제로는 해당 값을 사용하지 않는 오래된 애플리케이션과의 호환성을 유지해야 할 때 주로 유용합니다. 또한, 컬럼이 두 개의 값만 가질 수 있도록 해야 할 때도
CHAR(0)은 상당히 유용합니다. CHAR(0) NULL로 정의된 컬럼은 1비트만을 차지하며,
NULL과 '' (빈 string) 두 값만을 가질 수 있습니다.
[NATIONAL] VARCHAR(M) [CHARACTER SET charset_name] [COLLATE collation_name]가변 길이 string입니다.
_M_은 character 단위의 컬럼 최대 길이를 나타냅니다.
_M_의 범위는 0에서 65,535까지입니다.
VARCHAR의 실질적인 최대 길이는
최대 로우 크기(65,535바이트, 모든 컬럼이 공유)와 사용되는 character set에 의해 제한됩니다. 예를 들어,
utf8mb3 character는 최대 1 character당 3바이트가 필요하므로,
utf8mb3 character set을 사용하는
VARCHAR 컬럼은 최대 21,844 character까지 선언할 수 있습니다.
Section 10.4.7, “Limits on Table Column Count and Row Size”를 참조하십시오.
MySQL은 VARCHAR 값을
1바이트 또는 2바이트 길이 프리픽스와 데이터로 저장합니다. 길이 프리픽스는 값의 바이트 수를 나타냅니다.
VARCHAR 컬럼은 값이 255바이트를 넘지 않는 경우 1바이트 길이 프리픽스를 사용하고, 255바이트를 초과할 수 있는 경우 2바이트 길이 프리픽스를 사용합니다.
참고
MySQL은 표준 SQL 명세를 따르며,
VARCHAR 값에서 trailing 공백을 제거하지 않습니다.
VARCHAR는
CHARACTER VARYING의 축약형입니다.
NATIONAL VARCHAR는
VARCHAR 컬럼이 어떤 사전 정의된 character set을 사용해야 함을 정의하는 표준 SQL 방식입니다. MySQL은 이 사전 정의된 character set으로
utf8mb3를 사용합니다.
Section 12.3.7, “The National Character Set”.
NVARCHAR는
NATIONAL VARCHAR의 축약형입니다.
BINARY 타입은
CHAR 타입과 비슷하지만,
nonbinary character string이 아닌 binary 바이트 string을 저장합니다. 선택적인 길이
_M_은 바이트 단위의 컬럼 길이를 나타냅니다.
_M_을 생략하면 기본값은 1입니다.
VARBINARY 타입은
VARCHAR 타입과 비슷하지만,
nonbinary character string이 아닌 binary 바이트 string을 저장합니다.
_M_은 바이트 단위의 컬럼 최대 길이를 나타냅니다.
최대 길이가 255 (2⁸ − 1)
바이트인 BLOB 컬럼입니다. 각
TINYBLOB 값은 값의 바이트 수를 나타내는 1바이트 길이 프리픽스를 사용하여 저장됩니다.
최대 길이가 255 (2⁸ − 1)
character인 TEXT 컬럼입니다. 값에 멀티바이트 character가 포함된 경우, 실질적인 최대 길이는 더 작습니다. 각
TINYTEXT 값은 값의 바이트 수를 나타내는 1바이트 길이 프리픽스를 사용하여 저장됩니다.
최대 길이가 65,535 (2¹⁶ − 1)
바이트인 BLOB 컬럼입니다. 각
BLOB 값은 값의 바이트 수를 나타내는 2바이트 길이 프리픽스를 사용하여 저장됩니다.
이 타입에는 선택적인 길이 _M_을 지정할 수 있습니다. 이렇게 하면, MySQL은
M 바이트 길이 값을 저장할 수 있는 가장 작은
BLOB 타입으로 컬럼을 생성합니다.
최대 길이가 65,535 (2¹⁶ − 1)
바이트인 TEXT 컬럼입니다. 값에 멀티바이트 character가 포함된 경우, 실질적인 최대 길이는 더 작습니다. 각
TEXT 값은 값의 바이트 수를 나타내는 2바이트 길이 프리픽스를 사용하여 저장됩니다.
이 타입에는 선택적인 길이 _M_을 지정할 수 있습니다. 이렇게 하면, MySQL은
M character 길이 값을 저장할 수 있는 가장 작은
TEXT 타입으로 컬럼을 생성합니다.
최대 길이가 16,777,215 (2²⁴ −
BLOB 컬럼입니다. 각
MEDIUMBLOB 값은 값의 바이트 수를 나타내는 3바이트 길이 프리픽스를 사용하여 저장됩니다.최대 길이가 16,777,215 (2²⁴ −
TEXT 컬럼입니다. 값에 멀티바이트 character가 포함된 경우, 실질적인 최대 길이는 더 작습니다. 각
MEDIUMTEXT 값은 값의 바이트 수를 나타내는 3바이트 길이 프리픽스를 사용하여 저장됩니다.최대 길이가 4,294,967,295 또는 4GB
(2³² − 1) 바이트인 BLOB 컬럼입니다.
LONGBLOB 컬럼의 실질적인 최대 길이는 클라이언트/서버 프로토콜에서 설정된 최대 패킷 크기와 사용 가능한 메모리에 따라 달라집니다. 각
LONGBLOB 값은 값의 바이트 수를 나타내는 4바이트 길이 프리픽스를 사용하여 저장됩니다.
최대 길이가 4,294,967,295 또는 4GB
(2³² − 1) character인 TEXT 컬럼입니다. 값에 멀티바이트 character가 포함된 경우, 실질적인 최대 길이는 더 작습니다.
LONGTEXT
컬럼의 실질적인 최대 길이 또한 클라이언트/서버 프로토콜에서 설정된 최대 패킷 크기와 사용 가능한 메모리에 따라 달라집니다. 각
LONGTEXT
값은 값의 바이트 수를 나타내는 4바이트 길이 프리픽스를 사용하여 저장됩니다.
열거형입니다. 값 목록
'value1',
'value2',
..., NULL 또는 특수한 '' 에러 값 중에서 하나의 값만을 가질 수 있는 string 객체입니다.
ENUM 값은 내부적으로 정수로 표현됩니다.
ENUM 컬럼은 최대 65,535개의 서로 다른 element를 가질 수 있습니다.
개별 ENUM element의 최대 지원 길이는
M <= 255 이면서
(M x
w) <= 1020인 값입니다. 여기서
M은 element literal 길이이고,
_w_는 해당 character set에서 최대 길이 character가 필요로 하는 바이트 수입니다.
집합입니다. 값 목록
'value1',
'value2',
...에서 0개 이상의 값을 가질 수 있는 string 객체입니다. 각 값은 이 목록에서 선택되어야 합니다.
SET
값은 내부적으로 정수로 표현됩니다.
SET 컬럼은 최대 64개의 서로 다른 멤버를 가질 수 있습니다.
개별 SET element의 최대 지원 길이는
M <= 255 이면서
(M x
w) <= 1020인 값입니다. 여기서
M은 element literal 길이이고,
_w_는 해당 character set에서 최대 길이 character가 필요로 하는 바이트 수입니다.
13.3 String Data Types
13.3.2 The CHAR and VARCHAR Types