본문 바로가기
Back-End/🐬MySQL (RDBMS)

mySQL 주요 데이터타입(자료형)

by 코딩하는 동현😎 2022. 5. 4.

이전 포스팅에서 테이블을 생성할 때, 각 컬럼마다 저장될 값에 알맞은 데이터 타입(Data type)을 설정했는데요.

 

데이터 타입을 잘 설정해야 저장 용량을 효율적으로 활용할 수 있고, 나중에 row 수가 많아졌을 때 성능을 개선할 수 있습니다.

 

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

 

MySQL의 데이터 타입 중 일반적으로 쓰이는 것들은 다음 세 가지 카테고리로 분류할 수 있습니다.

  • Numeric types(숫자형 타입)
  • Date and Time types(날짜 및 시간 타입)
  • String types(문자열 타입)

 

1. Numeric types(숫자형 타입)

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

숫자형 타입은 다시 정수형 타입실수형 타입으로 나눌 수 있는데요. 하나씩 살펴볼게요.


(1) 정수형 타입 

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


1) TINYINT 

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

TINYINT에서 INT는 Integer(정수)의 줄임말인데요. 최소 -128 ~ 최대 127 까지의 정수를 저장할 수 있는 타입입니다.

이때 SINGED와 UNSIGNED라는 개념을 알아야하는데요. 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

BIGINT 데이터 타입을 사용한다면 아무리 큰 정수라도 잘 저장할 수 있겠죠? 


(2) 실수형 타입

우리는 정수뿐만 아니라 소수점이 붙어있는 수를 사용하기도 하는데요, 소수점이 있는 자료형입니다.

 

1) DECIMAL

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

여기서 M은 최대로 쓸 수 있는 전체 숫자의 자리수이고, D는 최대로 쓸 수 있는 소수점 뒤에 있는 자리의 수를 의미합니다.

예를 들어

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, 

범위의 실수들을 나타낼 수 있는 데이터 타입입니다. 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’ 이런 식으로 연, 월, 일, 시, 분, 초를 나타냅니다. 그럼 DATETIME 타입과는 어떤 점이 다를까요? TIMESTAMP 타입은 타임 존(세계 시간대) 정보도 함께 저장한다는 점이 다릅니다.

각 나라별 시간을 조회할 수 있는것입니다!

 

UTC라는 개념을 알아야 합니다. 전세계에 여러 시간대(타임존, time-zone)가 존재한다는 사실은 알고 계시죠? 각각의 시간대는 UTC를 기준으로 나타낼 수 있는데요. UTC(Coordinated Universal Time)는 국제 사회에서 통용되는 표준 시간 체계로 '국제 표준시'라고도 합니다. UTC는 영국 런던을 기준으로 하는데요. 우리나라는 런던을 기준으로 시간이 9시간 더 빠르기 때문에, 우리나라의 시간을 표현할 때는 UTC+9라고 표현합니다.

그러니까 위에서 제가 저장한 날짜 시간 값은 이미 UTC+9에 해당하는 값인 거죠.

나중에 기회되면 이것을 이용하는 실습을 해보겠습니다.

(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를 쓸 수 있습니다.

그런데 VARCHAR는 CHAR보다 허용되는 최대 저장 길이가 더 크다는 점 말고 다른 차이점도 있습니다.

그건 바로 CHAR는 고정 길이 타입이고, VARCHAR는 가변 길이 타입이라는 점입니다.

따라서 값의 길이가 크게 변하지 않을 컬럼에는 CHAR 타입을 사용하고, 길이가 들쑥날쑥할 컬럼에는 VARCHAR 타입을 쓰는 게 좋습니다. 


(3) TEXT

문자열을 저장하는 데이터 타입으로 최대 65535 자까지 저장할 수 있습니다. 이외에도 16,777,215 자까지 저장할 수 있는 MEDIUMTEXT,  4,294,967,295자까지 저장할 수 있는 LONGTEXT 타입이 있습니다.

정말 길이가 긴 문자열을 저장하려면 TEXT 계열의 타입을 써야합니다.

 

반응형

댓글