[MySQL강의노트] 제3강 데이터 타입
테이블을 만들어 봅시다.
컬럼 타입
숫자 타입
MySQL은 숫자 타입의 컬럼에 지정된 자리수에서 모자란 칸만큼 "0"으로 채워주는 "ZEROFILL" 속성을 지정하면 자동으로 숫자 타입의 컬럼에 "UNSIGNED" 속성을 추가합니다. "UNSIGNED" 속성과 "SIGNED" 속성을 함께 지원하고 있으며 디폴트로 부호있는 숫자를 쓰도록 되어 있기 때문에 "SIGNED"는 사용하지 않습니다.
"SERIAL"은 "BIG UNSIGNED NOT NULL AUTO_INCREMENT UNIQUE"의 별칭(alias)으로 사용됩니다. 정수 타입 컬럼의 정의시 "SERIAL DEFAULT VALUE"는 "NOT NULL AUTO_INCREMENT UNIQUE"의 별칭(alias)입니다.
BIT[(M)]
비트 필드 타입. M은 bit의 길이를 나타내며 1 ~ 64의 값을 가질 수 있습니다. M을 생략시 디폴트 값은 1입니다.
TINYINT[(M)] [UNSIGNED] [ZEROFILL]
부호있는 타입은 -127 ~ 128의 값을 가지며, 부호없는 타입은 0 ~ 255의 값을 가집니다. 1byte 크기를 가집니다.
BOOL, BOOLEAN
TINYINT(1)의 동일한 표현(synonym)입니다. 0은 false를 의미하며 0이 아닌 값은 true를 의미합니다. "TRUE"와 "FALSE"는 그저 "1"과 "0"의 별칭(alias)으로 사용됩니다.
SMALLINT[(M)] [UNSIGNED] [ZEROFILL]
부호있는 타입은 -32768 ~ 32767의 값을 가지며, 부호없는 타입은 0 ~ 65535의 값을 가집니다. 2byte 크기를 가집니다.
MEDIUMINT[(M)] [UNSIGNED] [ZEROFILL]
부호있는 타입은 -8388608 ~ 8388607의 값을 가지며, 부호없는 타입은 0 ~ 16777215의 값을 가집니다. 3byte 크기를 가집니다.
INT[(M)] [UNSIGNED] [ZEROFILL]
부호있는 타입은 -2147483648 ~ 2147483647의 값을 가지며, 부호없는 타입은 0 ~ 4294967295의 값을 가집니다. 4byte 크기를 가집니다.
INTEGER[(M)] [UNSIGNED] [ZEROFILL]
INT의 동일한 표현(synonym)입니다.
BIGINT[(M)] [UNSIGNED] [ZEROFILL]
부호있는 타입은 -9223372036854775808 ~ 9223372036854775807의 값을 가지며, 부호없는 타입은 0 ~ 18446744073709551615의 값을 가집니다. 8byte 크기를 가집니다.
FLOAT[(M,D)] [UNSIGNED] [ZEROFILL]
M은 전체 자리수(0 ~ 23)를 나타내며 D는 소수점 자리수를 나타냅니다. 부호있는 타입은 -3.402823466E+38 ~ -1.175494351E-38의 값을 가지며, 부호없는 타입은 0과 1.175494351E-38 ~ 3.402823466E+38의 값을 가집니다. 4byte 크기를 가집니다.
DOUBLE[(M,D)] [UNSIGNED] [ZEROFILL]
M은 전체 자리수(24 ~ 53)를 나타내며 D는 소수점 자리수를 나타냅니다. 부호있는 타입은 -1.7976931348623157E+308 ~ -2.2250738585072014E-308의 값을 가지며, 부호없는 타입은 0과 2.2250738585072014E-308 ~ 1.7976931348623157E+308의 값을 가집니다. 8byte 크기를 가집니다.
DOUBLE PRECISION[(M,D)] [UNSIGNED] [ZEROFILL], REAL[(M,D)] [UNSIGNED] [ZEROFILL]
DOUBLE의 동일한 표현(synonym)입니다. 만일 REAL AS FLOAT SQL 모드가 켜져 있으면 REAL은 DOUBLE보다는 FLOAT의 동일한 표현이 됩니다.
FLOAT(p) [UNSIGNED] [ZEROFILL]
p의 값이 0 ~ 23이면 FLOAT 타입으로 23 ~ 53이면 DOUBLE 타입으로 사용됩니다.
DECIMAL[(M[,D])] [UNSIGNED] [ZEROFILL]
십진 상수로 저장되며 M은 65까지 D는 30까지의 값을 가질 수 있으며 M과 D는 디폴트로 각각 10과 0 값을 가집니다.
DEC[(M[,D])] [UNSIGNED] [ZEROFILL], NUMERIC[(M[,D])] [UNSIGNED] [ZEROFILL], FIXED[(M[,D])] [UNSIGNED] [ZEROFILL]
DECIMAL의 동일한 표현입니다. FIXED 시노님은 다른 데이터베이스 시노님과 호환됩니다.
날자 타입
DATE
'1000-01-01' ~ '9999-12-31' 범위의 기간을 표현하며, MySQL은 'YYYY-MM-DD' 형식으로 표시합니다.
DATETIME
'1000-01-01 00:00:00' ~ '9999-12-31 23:59:59' 범위의 기간을 표현하며, MySQL은 'YYYY-MM-DD HH:MM:SS' 형식으로 표시합니다.
TIMESTAMP
'1970-01-01 00:00:01' UTC ~ '2038-01-19 03:14:07' UTC 기간을 표현합니다. TIMESTAMP는 INSERT와 UPDATE시 자동으로 시간이 증가하고 NULL 값을 지정하면 최초 실행 시간이 자동으로 입력됩니다. MySQL은 'YYYY-MM-DD HH:MM:SS' 형식으로 표시합니다.
TIME
'-838:59:59' ~ '838:59:59' 범위의 시간을 표현하며, MySQL은 'HH:MM:SS' 형식으로 표시합니다.
YEAR[(2|4)]
4자리의 경우 1901 ~ 2155 범위의 년도와 0000년을 표현합니다. 2자리인 경우 70 ~ 69 범위의 년도를 표현하며 1970년에서 2069년을 의미합니다. MySQL은 'YYYY' 형식으로 표시합니다.
문자 타입
[NATIONAL] CHAR[(M)] [CHARACTER SET charset_name] [COLLATE collation_name]
고정 길이 문자 타입으로 오른쪽 공백은 무시됩니다. 1 ~ 255 길이를 갖습니다. NATIONAL 속성이 지정되면 UTF-8을 이용합니다. 줄여서 NCHAR로 선언합니다.
[NATIONAL] VARCHAR(M) [CHARACTER SET charset_name] [COLLATE collation_name]
가변 길이 문자 타입으로 오른쪽 공백은 무시됩니다. 1 ~ 65,535 길이를 갖습니다. UTF-8로 저장시 21,844 길이로 저장됩니다. MySQL은 255자까지는 1byte로 저장하며 255자를 넘는 경우 2byte로 저장합니다. VARCHAR는 CHARACTER VARYING의 줄임말입니다.
BINARY(M)
CHAR 타입과 비슷하지만 바이너리 바이트 데이터를 저장합니다.
VARBINARY(M)
VARCHAR 타입과 비슷하지만 바이너리 바이트 데이터를 저장합니다.
TINYBLOB
최대 255 (28 – 1) 바이트의 BLOB 타입 데이터를 저장합니다.
TINYTEXT [CHARACTER SET charset_name] [COLLATE collation_name]
최대 255 (28 – 1) 글자의 문자 데이터를 저장합니다. 멀티 바이트의 경우 최대 길이내에서 저장됩니다.
BLOB[(M)]
최대 65,535 (216 – 1) 바이트의 BLOB 타입 데이터를 저장합니다.
TEXT[(M)] [CHARACTER SET charset_name] [COLLATE collation_name]
최대 65,535 (216 – 1) 글자의 문자 데이터를 저장합니다.
MEDIUMBLOB
최대 16,777,215 (224 – 1) 바이트의 BLOB 타입 데이터를 저장합니다.
MEDIUMTEXT [CHARACTER SET charset_name] [COLLATE collation_name]
최대 16,777,215 (224 – 1) 글자의 문자 데이터를 저장합니다.
LONGBLOB
최대 4,294,967,295 혹은 4GB (232 – 1) 바이트의 BLOB 타입 데이터를 저장합니다.
LONGTEXT [CHARACTER SET charset_name] [COLLATE collation_name]
최대 4,294,967,295 혹은 4GB (232 – 1) 글자의 문자 데이터를 저장합니다.
ENUM('value1','value2',...) [CHARACTER SET charset_name] [COLLATE collation_name]
Enumeration 타입. 인자로 지정된 value1, value2, ... 중 하나의 값이나 NULL 값을 저장할 수 있습니다. 그외에 인자로 지정되지 않은 문자의 경우 공백으로 저장됩니다. 최대 65,535개까지 지정할 수 있습니다.
SET('value1','value2',...) [CHARACTER SET charset_name] [COLLATE collation_name]
집합(set) 타입. ENUM과 달리 한 컬럼에 인자로 지정된 데이터를 0개 이상 저장할 수 있습니다. SET 타입의 컬럼은 최대 64개의 인자 집합을 저장할 수 있습니다.