[TIL/데이터관리] MySQL에서 사용 가능한 타입들

알락·2022년 10월 19일
0

데이터베이스

목록 보기
1/4
post-custom-banner

Data Logo

숫자 타입

정수 타입

Signed 인 경우

타입저장공간최솟값최댓값
TINYINT1바이트-128127
SMALLINT2바이트-32,76832,767
MEDIUMINT3바이트-8,388,6088,388,607
INT4바이트-2,147,483,6482,147,483,647
BIGINT8바이트-9,223,372,036,854,775,8089,223,372,036,854,775,807

Unsigned 인 경우

타입저장공간최솟값최댓값
TINYINT1바이트0255
SMALLINT2바이트065,535
MEDIUMINT3바이트016,777,215
INT4바이트04,294,967,295
BIGINT8바이트018,446,744,073,709,551,615

18,446,744,073,709,551,61518,446,744,073,709,551,615
1019\approx 10^{19}
(264)\approx (2^{64})

가장 큰 숫자를 가질 수 있는 BIGINT의 크기가 2642^{64}이 된다. 현재 비밀번호 암호화에 많이 쓰이는 SHA-256 같은 경우 22562^{256}bit를 사용하고 있다. 우주의 있는 원소의 갯수가 22562^{256}과 거의 비슷하다고 하는데, BIGINT의 크기는 그에 제곱근의 제곱근 정도로 숫자가 큰 것이다.
underFlow Error

위 이미지는 unsigned로 음수의 데이터를 넣을 수 없는 CUSTOMER_ID 컬럼에 "-1"을 넣으려고 할 때 MySQL에서 발생시키는 에러다.

고정 소수점 타입

DECIMAL(M,D) 를 이용하면 된다. M에는 소수 부분 포함, 총 자릿수를 나타낸다. M의 최댓값은 65이다. D는 소수 부분 자릿수를 나타낸다.

부동 소수점 타입

FLOATDOUBLE을 사용한다. FLOAT는 4바이트, DOUBLE은 8바이트를 사용한다. 고정 소수점처럼 괄호 안에 MD를 넣어 자릿수를 표현한다.

DECIMALFLOAT - DOBULE의 차이는 정확한 값 표현이다.
DECIMAL은 고정 소수점의 방식을 취하기 때문에 소수 자리수의 변경 없이 정확하게 표현한다. 다른 소수점 표현 방식은 실수 값을 대략적으로 표현한다.


문자열 타입

CHAR vs VARCHAR

두 타입 모두 문자열을 저장할 때 사용하는 타입이다.
CHAR은 문자열의 길이가 고정되기 때문에 지정한 길이보다 작은 문자열이 들어오면 공백으로 채운다.
VARCHAR은 실제 입력되는 문자열의 길이만큼만 저장한다.

BINARY vs VABINARY

문자 집합이 아닌 바이너리 데이터를 저장할 때 사용한다.
위의 문자열 타입 사용 차이와 같다.

BLOB와 TEXT

BLOB는 Binary Large Object를 의미, 바이너리 데이터를 다양하게 저장할 수 있다.
TINYBLOB, BLOB, MEDIUMBLOB, LONGBLOB로 구분.

TEXT는 기본값을 가질 수 없는 VARCHAR 이다. 문자열 대소문자를 구분한다.
TINYTEXT, TEXT, MEDIUMTEXT, LONGTEXT로 구분된다.

ENUM

ENUM은 정의한 집합의 요소 중 하나를 저장할 수 있는 타입이다.
ENUM("데이터값1", "데이터값2", "데이터값3",...) 형식으로 사용하면 된다.
괄호 안에 첫 번째 요소부터 숫자 1과 대응한다.
숫자 0ENUM 타입이 지정된 컬럼에서는 빈 문자열을 의미하게 된다.
ENUM타입을 사용하는 컬럼에서는 집합의 요소와 숫자가 데이터에 대응이 된다. 이외에 다른 입력값이 있으면 에러 처리를 한다.

예를 들어 ENUM("남", "여")로 타입을 정했다고 하자.
그럼 새로 입력되는 데이터의 성별이 "남"으로 들어오거나 1로 들어와야 테이블에 저장이 된다.
이외에 값은 에러가 난다.
다음은 잘 작동하는 MySQL 명령이다.

ENUM validate

다음은 잘 작동하지 못한 MySQL 명령이다.

ENUM no working

만약 숫자로 데이터를 저장하게 되면 테이블에는 결과적으로 숫자와 대응되는 지정된 자료값으로 대체된다.


날짜와 시간 타입

DATE

DATE의 기본 형식은 "YYYY-MM-DD" 이다. 날짜 범위는 "1000-01-01" 부터 "9999-12-31"까지 가능하다.

DATETIME

기본 형식은 "YYYY-MM-DD HH:MM:SS"이다. 범위는 "1000-01-01 00:00:00" 부터 "9999-12-31 23:59:59"까지 저장 가능하다.

TIMESTAMP

별다른 설정을 안 한다면, DEFAULT 값이 데이터 마지막 입력 시간으로 변경되어 저장되는 데이터타입이다. 범위는 "1970-01-01 00:00:01 UTC" 부터 "2038-01-19 03:14:07 UTC" 까지다.

별다른 설정 없으면, DEFAULT 값이 알아서 들어간다고 설명되어 있었는데 막상 까보니까 아니었다. 테이블에 TIMESTAMP를 사용하는 컬럼을 새로 만들주었다.

not default

ALTER를 이용하여 컬럼을 추가했을 때는 위와 같이 Default가 지정이 안 되어 있다. 따로 컬럼을 수정하는 작업을 해주었다.

심지어 CREATE할 때에도 똑같이 TIMESTAMP 타입에 Default 값은 따로 설정되지 않는다.
이는 추후에 다른 포스팅으로 다루도록 하겠다.

입력받은 데이터의 형식이 유효하지 않다면 위의 세 타입 모두 0을 테이블에 저장한다.

TIME

시간을 저장하는 타입이다.
형식은 "HH:MM:SS"나 "HHH:MM:SS"이다. 범위는 "-838:59:59"부터 "838:59:59"까지다.
유효하지 않은 시간은 "00:00:00"로 저장된다.

출처

profile
블록체인 개발 공부 중입니다, 프로그래밍 공부합시다!
post-custom-banner

0개의 댓글