
| 타입 | 저장공간 | 최솟값 | 최댓값 |
|---|---|---|---|
| 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"로 저장된다.