본문 바로가기
IT/SQL

[MySQL] 데이터베이스 컬럼의 데이터타입

by marketinkerbell 2022. 2. 2.
반응형

 

 

컬럼의 데이터타입 (datatype) 

 

 

사용할 수 있는 데이터 타입은 DBMS마다 조금씩 차이가 있다.

MySQL의 데이터 타입들을 살펴보자.

MySQL의 데이터 타입은 일반적으로 세 가지 카테고리로 분류할 수 있다.

Numeric types(숫자형 타입)

Date and Time types(날짜 및 시간 타입)

String types(문자열 타입)

 

 

 

 

1. Numeric types(숫자형 타입)

 

 

숫자를 나타내기 위해서 사용되는 데이터 타입.

숫자형 타입은 다시 정수형 타입과 실수형 타입으로 나눌 수 있는다.

 

 

(1) 정수형 타입 


말 그대로 정수값을 저장하는 타입. 여기에 해당하는 타입들은 그것이 나타낼 수 있는 정수값의 범위에 차이가 있다.

 

 

1) TINYINT 
: 작은 범위의 정수들을 저장할 때 쓰는 데이터 타입.

TINYINT에서 INT는 Integer(정수)의 줄임말.

최소 -128 ~ 최대 127 까지의 정수를 저장할 수 있는 타입이다. 

 

SIGNED는 ‘양수, 0, 음수’를 나타내고, UNSIGNED는 ‘0과 양수’를 나타낸다.

TINYINT 뒤에 둘 중 무엇을 붙이느냐에 따라 아래와 같이 나타낼 수 있는 숫자의 범위가 달라진다.

TINYINT SIGNED : -128 ~ 127 

TINYINT UNSIGNED : 0 ~ 255

이런 원리는 다른 정수형 타입에도 똑같이 적용된다. 

참고로, TINYINT라고만 썼을 때는 SIGNED가 붙은 것으로 자동 해석된다. 

 


2) SMALLINT
: TINYINT 보다 좀더 큰 범위의 정수를 나타낼 때 쓰는 데이터 타입.

SINGED와 UNSIGNED에 따라 저장할 수 있는 수의 범위는 다음과 같다. 

SMALLINT SIGNED : -32768 ~ 32767 

SMALLINT UNSIGNED : 0 ~ 65535

 


3) MEDIUMINT 
: 더 넓은 범위를 나타내는 데이터 타입. 

MEDIUMINT SIGNED : -8388608 ~ 8388607

MEDIUMINT UNSIGNED : 0 ~ 16777215

 


4) INT 
: 더 넓은 범위를 나타내는 데이터 타입.

INT SIGNED : -2147483648 ~ 2147483647

INT UNSIGNED : 0 ~ 4294967295

 


5) BIGINT 
: 아주 큰 범위의 정수를 저장하는 데이터 타입. 

BIGINT SIGNED : -9223372036854775808 ~ 9223372036854775807

BIGINT UNSIGNED : 0 ~ 18446744073709551615

 


(2) 실수형 타입


소수점이 붙어있는 수를 저장하기 위한 타입을 실수형 타입이라고 한다.

키(179.741cm)나 몸무게(67.12kg), 온도(36.5도)처럼 정밀한 값이 요구되는 컬럼에는 실수형 타입을 지정해야 한다.

실수형 타입은 그 타입마다 얼마나 넓은 범위의 수를 나타낼 수 있는지 뿐만 아니라
소수점 뒤에 얼마나 많은 개수의 자리수가 존재할 수 있는지, 지정할 수 있다.



1) DECIMAL
: 일반적으로 자주 쓰이는 실수형 타입 중 하나로 보통 DECIMAL(M, D)의 형식으로 나타낸다.

여기서 M은 최대로 쓸 수 있는 전체 숫자의 자리수이고,

D는 최대로 쓸 수 있는 소수점 뒤에 있는 자리의 수를 의미한다.  

 

EX)  DECIMAL (5, 2)라면 -999.99 부터 999.99 까지의 실수를 나타낼 수 있다.

M은 최대 65, D는 30까지의 값을 가질 수 있다. 

DECIMAL이라는 단어 대신 DEC, NUMERIC, FIXED를 써도 된다. 

 


2) FLOAT
:

-3.402823466E+38 ~ -1.175494351E-38,

0, 

1.175494351E-38 ~ 3.402823466E+38

범위의 실수들을 나타낼 수 있는 데이터 타입입니다. 참고로

-3.402823466E+38 은 (-3.402823466) X (10의 38제곱) 을 의미하고 

-1.175494351E-38 은 (-1.175494351) X (10의 38제곱 분의 1) 을 의미합니다.

 


3) DOUBLE 
:

-1.7976931348623157E+308 ~ -2.2250738585072014E-308, 

0, 

2.2250738585072014E-308 ~ 1.7976931348623157E+308

범위의 실수들을 나타낼 수 있는 데이터 타입.

FLOAT에 비해 더 넓은 범위의 수를 나타낼 수 있을 뿐만 아니라,

그 정밀도 또한 더 높은 타입. (소수점 뒤에 최대로 허용가능한 자리수가 더 많음)

 

 

 


2. 날짜 및 시간 타입(Date and Time Types)

 

 

날짜 및 시간 정보를 다루는 데이터 타입들. 

(1) DATE 
: 날짜를 저장하는 데이터 타입.

  ’2020-03-26’ 이런 형식의 연, 월, 일 순으로 값을 나타냄. 

(2) DATETIME
: 날짜와 시간을 저장하는 데이터 타입.

  ’2020-03-26 09:30:27’ 이런 식으로 연, 월, 일, 시, 분, 초를 나타냄. 

(3) TIMESTAMP
: 날짜와 시간을 저장하는 데이터 타입.

  ’2020-03-26 09:30:27’ 이런 식으로 연, 월, 일, 시, 분, 초를 + 타임 존(time_zone) 정보도 함께 저장

 

Datetime 타입과 Timestamp 타입은 타임 존 정보 저장 여부에서 차이가 있다.

(타임 존 : MySQL 서버의 시간대  UTC+9, UTC-11...)

만약 타임 존 정보를 굳이 함께 저장할 필요가 없다면 Datetime 타입을,

타임 존 정보도 함께 저장하고 싶다면 Timestamp 타입을 설정하면 된다.  

(4) TIME 
: 시간을 나타내는 데이터 타입. ’09:27:31’ 형식으로 ‘시:분:초’를 나타냄. 

 

 

 

 


3. 문자열 타입(String type) 

 

 

문자열을 저장하기 위한 타입.

이메일, 이름, 댓글, 구매후기 등

(1) CHAR
: 문자열을 나타내는 기본 타입으로 Character의 줄임말.

CHAR(30), 이런 형식으로 나타내는데, 괄호 안의 숫자는 문자를 최대 몇 자까지 저장할 수 있는지를 나타낸다.

30이라고 써있으면 최대 30자의 문자열을 저장할 수 있다는 뜻.

CHAR 타입의 괄호 안에는 0부터 255까지의 숫자를 적을 수 있다. 

 


(2) VARCHAR
: VARCHAR도 VARCHAR(30) 이런 식으로 문자열의 최대 길이를 지정할 수 있는 문자열 타입.

괄호 안에 최소 0부터 최대 65,535 (216 − 1)를 쓸 수 있다.

 


여기서 중요한 사실! 
CHAR는 고정 길이 타입이고, VARCHAR는 가변 길이 타입이다.

VARCHAR라는 단어 자체가 Character Varing의 줄임말로 가변 문자열이란 뜻이다.

 

쉽게 설명하자면, CHAR(10), VARCHAR(10)이 있을 때,
CHAR(10)은 어떤 길이의 문자열이 저장되더라도 항상 그 값이 10만큼의 저장 용량을 차지한다. 

하지만 VARCHAR(10)의 경우 만약 값이 ‘HI’ 이런 2자라면 저장 용량도 2만큼 차지한다.

저장 용량이 설정된 최대 길이에 맞게 고정되는 게 아니라 실제 저장된 값에 맞게 최적화된다.

대신 VARCHAR 타입으로 값이 저장될 때는 해당 값의 사이즈를 나타내는 부분(1byte 또는 2byte)이 저장 용량에 추가된다.

따라서 값의 길이가 크게 변하지 않을 컬럼에는 CHAR 타입을 사용하고, 

길이가 들쑥날쑥할 컬럼에는 VARCHAR 타입을 쓰는 게 좋다. 

 


(3) TEXT
문자열을 저장하는 데이터 타입으로 최대 65535 자까지 저장할 수 있다.

이외에도 16,777,215 (224 − 1) 자까지 저장할 수 있는 MEDIUMTEXT,

4,294,967,295(232 − 1) 자까지 저장할 수 있는 LONGTEXT 타입이 있다. 


댓글