개요
5.0 이상 버전을 기준으로 정리하였습니다.
5.0 미만 버전에는 아래와 다른 내용이 있을 수도 있습니다.
숫자
정수
TINYINT
- 1 바이트의 크기를 가진다.
- signed 기준 -128 ~ 127의 범위를 가진다.
SMALLINT
- 2 바이트의 크기를 가진다.
- signed 기준 -32768 ~ 32767의 범위를 가진다.
MEDIUMINT
- 3 바이트의 크기를 가진다.
- signed 기준 약 ±8백만의 범위를 가진다.
INT
- 4 바이트의 크기를 가진다.
- signed 기준 ±20억의 범위를 가진다.
- INT(N) [ZEROFILL]
- ZEROFILL 입력 시 N 자리 수 만큼 0이 나온다.
- N이 5일때 -> 00004, 00234, 231441
BIGINT
- 8 바이트의 크기를 가진다.
- signed 기준 ±900경의 범위를 가진다.
실수
DECIMAL
- 가변성을 가진다. (바이트가 고정되어있지 않음)
- 고정소수점 수이다.
- 소수점 위치가 고정되어 있기 때문에 유동소수점에 비해 표현할 수 있는 범위가 작다.
- 어떤 소수를 정확히 표현하는데 사용된다.
- 전체자리수(precision)와 소수점자리수(scale)를 가진다.
- DECIMAL(M,D) M은 실수(최대 65) D는 소수의 자릿수이다.
- DECIMAL(6)의 경우: -999999 ~ 999999
- DECIMAL(6, 3)의 경우: -999.999 ~ 999.999
FLOAT
- 4 바이트의 크기를 가진다.
- 유동소수점 수이다.
- 3.402823466×1038 ~ 3.402823466×1038의 범위를 가진다.
DOUBLE
- 8 바이트의 크기를 가진다.
- 유동소수점 수이다.
- 1.7976931348623157×10308 ~ 1.7976931348623157×10308의 범위를 가진다.
기타
BIT
- 가변성을 가지며 최대 64비트까지 사용할 수 있다.
- 비트값 타입을 가진다.
- 0과 1로 구성되는 바이너리(binary) 값을 저장할 수 있다.
- BIT(M) M (1~64)
BOOLEAN
날짜와 시간
DATETIME
- 8 바이트의 값을 가진다.
- 1000-01-01 00:00:00 ~ 9999-12-31 23:59:59의 범위를 가진다.
TIMESTAMP
- 4 바이트의 값을 가진다.
- 1970-01-01 00:00:00 이후로 지난 초가 저장된다.
- 1970-01-01 00:00:00 ~ 2038-01-19 03:14:07의 범위를 가진다.
- TIMESTAMP는 상대적인 값을 가진다. 즉, 국가나 시차에 따라 다른 값이 보인다.
DATE
- 3 바이트의 값을 가진다.
- 1000-01-01 ~ 9999-12-31의 범위를 가진다.
TIME
- 3 바이트의 값을 가진다.
- -838:59:59 ~ 838:59:59의 범위를 가진다.
YEAR
- 1 바이트의 값을 가진다.
- 1901 ~ 2155의 범위를 가진다.
문자열
CHAR/VARCHAR 와 TEXT의 차이점
CHAR/VARCHAR는 각 행에 저장이 되지만 TEXT는 따로 저장이 된다.
MySQL에서는 각 행이 최대 65,535 바이트까지 값을 저장할 수 있기 떄문에 VARCHAR(65,535)를 사용한다면 그 행에 다른 타입을 추가 할 수 없지만, TEXT를 사용한다면 각 행에 저장되는 것이 아닌 따로 저장되기 때문에 큰 값을 저장할 수 있다.
그러므로 각 행 값이 65,535 바이트가 넘어가지 않는 값을 다룬다면 VARCHAR를, 65,535 바이트가 넘어가는 값을 다룬다면 TEXT를 사용하는게 좋다.
CHAR
- 길이가 고정된 고정 길이의 문자열을 다룬다.
- CHAR(M) M(0~225)
- 설정한 크기보다 작은 길이의 문자열이 입력되면, 나머지 공간을 공백으로 채워 길이를 M과 같게 만든다.
- M이 동일 할때, 용량 대비 VARCHAR에 비해 더 많은 범위를 표현할 수 있다.
- M 은 입력 가능한 글자 수를 가리킨다.
- VARCHAR에 비해 연산속도가 더 효율적이다.
VARCHAR
- 길이가 고정되지 않는 가변 길이의 문자열을 다룬다.
- VARCHAR(M) M(0~65,535)
- 실제 입력된 문자열의 길이만큼만 저장하고 사용한다.
- M 은 입력 가능한 글자 수를 가리킨다.
TINYTEXT
TEXT
MEDIUMTEXT
- 16,777,215 (약 160만) 바이트의 크기를 가진다.
LONGTEXT
- 4,294,967,295(약 42억) 바이트의 크기를 가진다.
BLOB
- 바이너리 값을 저장할 때 사용한다.
- 이미지, 파일 등을 바이너리 데이터로 저장할때 사용한다.
- 65,535 바이트의 크기를 가진다.