타입 | 저장공간 | 최솟값 | 최댓값 |
---|---|---|---|
TINYINT | 1바이트 | -128 | 127 |
SMALLINT | 2바이트 | -32,768 | 32,767 |
MEDIUMINT | 3바이트 | -8,388,608 | 8,388,607 |
INT | 4바이트 | -2,147,483,648 | 2,147,483,647 |
BIGINT | 8바이트 | -9,223,372,036,854,775,808 | 9,223,372,036,854,775,807 |
타입 | 저장공간 | 최솟값 | 최댓값 |
---|---|---|---|
TINYINT | 1바이트 | 0 | 255 |
SMALLINT | 2바이트 | 0 | 65,535 |
MEDIUMINT | 3바이트 | 0 | 16,777,215 |
INT | 4바이트 | 0 | 4,294,967,295 |
BIGINT | 8바이트 | 0 | 18,446,744,073,709,551,615 |
가장 큰 숫자를 가질 수 있는 BIGINT
의 크기가 이 된다. 현재 비밀번호 암호화에 많이 쓰이는 SHA-256 같은 경우 의 bit
를 사용하고 있다. 우주의 있는 원소의 갯수가 과 거의 비슷하다고 하는데, BIGINT
의 크기는 그에 제곱근의 제곱근 정도로 숫자가 큰 것이다.
위 이미지는 unsigned
로 음수의 데이터를 넣을 수 없는 CUSTOMER_ID
컬럼에 "-1"을 넣으려고 할 때 MySQL
에서 발생시키는 에러다.
DECIMAL(M,D)
를 이용하면 된다. M
에는 소수 부분 포함, 총 자릿수를 나타낸다. M
의 최댓값은 65이다. D
는 소수 부분 자릿수를 나타낸다.
FLOAT
과 DOUBLE
을 사용한다. FLOAT
는 4바이트, DOUBLE
은 8바이트를 사용한다. 고정 소수점처럼 괄호 안에 M
과 D
를 넣어 자릿수를 표현한다.
DECIMAL
과FLOAT
-DOBULE
의 차이는 정확한 값 표현이다.
DECIMAL은 고정 소수점의 방식을 취하기 때문에 소수 자리수의 변경 없이 정확하게 표현한다. 다른 소수점 표현 방식은 실수 값을 대략적으로 표현한다.
두 타입 모두 문자열을 저장할 때 사용하는 타입이다.
CHAR
은 문자열의 길이가 고정되기 때문에 지정한 길이보다 작은 문자열이 들어오면 공백으로 채운다.
VARCHAR
은 실제 입력되는 문자열의 길이만큼만 저장한다.
문자 집합이 아닌 바이너리 데이터를 저장할 때 사용한다.
위의 문자열 타입 사용 차이와 같다.
BLOB
는 Binary Large Object를 의미, 바이너리 데이터를 다양하게 저장할 수 있다.
TINYBLOB, BLOB, MEDIUMBLOB, LONGBLOB로 구분.
TEXT
는 기본값을 가질 수 없는 VARCHAR
이다. 문자열 대소문자를 구분한다.
TINYTEXT, TEXT, MEDIUMTEXT, LONGTEXT로 구분된다.
ENUM
은 정의한 집합의 요소 중 하나를 저장할 수 있는 타입이다.
ENUM("데이터값1", "데이터값2", "데이터값3",...)
형식으로 사용하면 된다.
괄호 안에 첫 번째 요소부터 숫자 1
과 대응한다.
숫자 0
은 ENUM
타입이 지정된 컬럼에서는 빈 문자열을 의미하게 된다.
ENUM
타입을 사용하는 컬럼에서는 집합의 요소와 숫자가 데이터에 대응이 된다. 이외에 다른 입력값이 있으면 에러 처리를 한다.
예를 들어
ENUM("남", "여")
로 타입을 정했다고 하자.
그럼 새로 입력되는 데이터의 성별이 "남"으로 들어오거나1
로 들어와야 테이블에 저장이 된다.
이외에 값은 에러가 난다.
다음은 잘 작동하는MySQL
명령이다.
다음은 잘 작동하지 못한
MySQL
명령이다.
만약 숫자로 데이터를 저장하게 되면 테이블에는 결과적으로 숫자와 대응되는 지정된 자료값으로 대체된다.
DATE
의 기본 형식은 "YYYY-MM-DD" 이다. 날짜 범위는 "1000-01-01" 부터 "9999-12-31"까지 가능하다.
기본 형식은 "YYYY-MM-DD HH:MM:SS"이다. 범위는 "1000-01-01 00:00:00" 부터 "9999-12-31 23:59:59"까지 저장 가능하다.
별다른 설정을 안 한다면, DEFAULT 값이 데이터 마지막 입력 시간으로 변경되어 저장되는 데이터타입이다. 범위는 "1970-01-01 00:00:01 UTC" 부터 "2038-01-19 03:14:07 UTC" 까지다.
별다른 설정 없으면, DEFAULT 값이 알아서 들어간다고 설명되어 있었는데 막상 까보니까 아니었다. 테이블에
TIMESTAMP
를 사용하는 컬럼을 새로 만들주었다.
ALTER
를 이용하여 컬럼을 추가했을 때는 위와 같이 Default가 지정이 안 되어 있다. 따로 컬럼을 수정하는 작업을 해주었다.심지어
CREATE
할 때에도 똑같이TIMESTAMP
타입에 Default 값은 따로 설정되지 않는다.
이는 추후에 다른 포스팅으로 다루도록 하겠다.
입력받은 데이터의 형식이 유효하지 않다면 위의 세 타입 모두 0을 테이블에 저장한다.
시간을 저장하는 타입이다.
형식은 "HH:MM:SS"나 "HHH:MM:SS"이다. 범위는 "-838:59:59"부터 "838:59:59"까지다.
유효하지 않은 시간은 "00:00:00"로 저장된다.