- TINYINT: 0 ~ 255 -> -128 ~ +127
- SMALLINT: 0 ~ 65,535 -> -32,768 ~ 32,767
- MEDIUMINT: 0 ~16,777,215 -> -8,388,608 ~ 8,388,607
- INT: 0 ~ 4,294,967,295 -> 2,147,483,648 ~ 2,147,483,647
- BIGINT: 0 ~ (2^64-1)
- DECIMAL(p,s): p = 소수 전체 자리수, s = 소수 이하 자리수
디폴트 부호 특성은 SIGNED 이므로, 부호를 사용하지 않으려면 UNSIGNED 선언해야함
항상 n개 문자를 저장한다.
- CHAR(n): 최대 255문자
최대 n개 문자까지 저장한다.
- VARCHAR(n): 최대 65,535 문자
- 1/2 byte prefix + data
여기서 CHAR(50)의 경우, 우측의 남는 공간을 공백으로 채운다.
VARCHAR(n)과 동일하나 n은 미리 할당된 값을 사용한다.
- TINYTEXT: 최대 255문자
- TEXT: 최대 65,535문자
- MEDIUMTEXT: 16,777,215문자
- LONGTEXT: 4,294,967,295문자
나열된 문자열 중 하나의 문자열만 갖는다.
- Continent ENUM('Asia', 'Europe', 'America', 'Africa', 'OCeana')
NULL 포함 1개 이상의 문자열을 갖는다.
- Symptom SET('sneezing', 'runny nose', 'stuffy head')
CREATE TABLE MySet ( Id INT, Col SET(‘one’, ‘two’, ‘three’) ); INSERT INTO MySet (Id, Col) VALUES (1, ‘one’), (2, ‘one,two’); SELECT Id, Col FROM MySet;
단, PK or FK 에는 ENUM/SET 사용 불가능
항상 n개 바이트를 저장한다.
- BINARY(n)
최대 n개 바이트까지 저장한다.
- VARBINARY(n): 1/2 byte prefix + data
VARBINARY(n)과 동일하나 n은 미리 할당된 값을 사용한다.
- TINYBLOB: 1 byte prefix + data
- BLOB: 2 byte prefix + data
- MEDIUMBLOB: 3 byte prefix + data
- LONGBLOB: 4 byte prefix + data
TEXT/BLOB <-> VARCHAR(n)/VARBINARY(n) 차이점은? -> TEXT/BLOB 는 반드시 index prefix length 설정해줘야한다. 그리고 TEXT/BLOB 는 디폴트 값을 가질 수 없다.
- YYYY
- '2019'
- YYYY-MM-DD
- '2019-08-04'
- HH:MM:SS[.fraction]
- '12:59:02.000001' (fsp = 6) -> fsp 는 자리수
- YYYY-MM-DD HH:MM:SS[.fraction]
- '2019-08-04 12:59:02'
string 으로 보고 그대로 저장한다.
- '2019-08-04 12:59:02'
보여질 때는 DATETIME과 동일하다. 보여질 때 편하라고 계산한 후 보여주는 것이다.
근데 왜 굳이 만들었을까? 메모리 상 효율적이기 때문이다.
DATETIME은 string으로 저장하지만, TIMESTAMP는 정수로 저장한다.