MySQL 자료형


숫자형

자료형 설명 크기 비고  
BIT 1 또는 0. 참 거짓의 boolean 형. 1bit    
BOOL 0은 false, 0이 아닌 값은 true.      
TINYINT(n) 정수형 -128 ~ 127
n=1일 경우 0 또는 1 입력.
1byte 뒤에 SIGNED가 생략됨  
TINYINT UNSIGNED 정수형 0 ~ 255 1byte    
SMALLINT 정수형 -32,768 ~ 32,767 2bytes 뒤에 SIGNED가 생략됨  
SMALLINT UNSIGNED 정수형 0 ~ 65,535 2bytes    
MEDIUMINT 정수형 -8,388,608 ~ 8,388,607 3bytes 뒤에 SIGNED가 생략됨  
MEDIUMINT UNSIGNED 정수형 0 ~ 16,777,215 3bytes    
INT 정수형 -2,147,483,648 ~ 2,147,483,647 4bytes 뒤에 SIGNED가 생략됨  
INT UNSIGNED 정수형 0 ~ 4,294,967,295 4bytes 뒤에 SIGNED가 생략됨  
BIGINT 정수형 -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807 8bytes    
BIGINT UNSIGNED 정수형 0 ~ 18,446,744,073,709,551,615 뒤에 SIGNED가 생략됨 8bytes  
FLOAT 실수형 -3.402823466E+38 ~ -1.175494351E-38
0
1.175494351E-38 ~ 3.402823466E+38
4bytes    
DOUBLE 실수형 -1.7976931348623157E+308
~ -2.2250738585072014E-308,
8bytes    
REAL DOUBLE과 동일      
DECIMAL(m, d) 실수형 m:전체 숫자 개수, d:소수점 이하 자리 수.
-1,038+1 ~ 1,308-1 표현 가능
  DECIMAL(3,1) : -99.9 ~ 99.9  


문자형

자료형 설명 크기 비고
CHAR(n) 문자열. n은 나타낼 수 있는 글자 수를 지정. n=0~255 글자수bytes  
VARCHAR(n) 문자열. n은 나타낼 수 있는 글자 수를 지정. n=0~65,535 글자수 + 1bytes CHAR와 달리 가변 길이의 특성을 가짐
TINYTEXT 문자열. 1~255 자 입력 가능   BLOB과 비교했을 때 문자 데이터 저장에 유리
TEXT 문자열. 최대 65,535 자까지 입력 가능.   BLOB과 비교했을 때 문자 데이터 저장에 유리
MEDIUMTEXT 문자열. 1~16,777,215 자 입력 가능   BLOB과 비교했을 때 문자 데이터 저장에 유리
LONGTEXT 문자열. 1~429,496,729 자 입력 가능   BLOB과 비교했을 때 문자 데이터 저장에 유리
TINYBLOB 문자열. 1~255 자 입력 가능 TEXT와 비교했을 때 바이너리 데이터 저장에 유리  
BLOB   문자열. 최대 65,535 자까지 입력 가능.지정한 용량 + 2bytes TEXT와 비교했을 때 바이너리 데이터 저장에 유리
MEDIUMBLOB 문자열. 1~16,777,215 자 입력 가능 지정한 용량 + 3bytes TEXT와 비교했을 때 바이너리 데이터 저장에 유리
LONGBLOB 문자열. 1~429,496,729 자 입력 가능 지정한 용량 + 4bytes TEXT와 비교했을 때 바이너리 데이터 저장에 유리
ENUM 칼럼 생성시 열거한 값만을 입력할 수 있는 자료형. ~255개인 경우 1byte
~65,535개인 경우 2byte
아래 추가 설명 참조
SET enum과 비슷하나,
enum은 열거된 값 중 단일값만 허용하는 반면
set은 열거된 값들의 조합도 허용
  아래 추가 설명 참조


날짜형

자료형 설명 크기 비고
DATE 날짜. 2023-03-02 와 같이 연월일 순.
1000-01-01 ~ 9999-12-31
3bytes  
DATETIME 날짜와 시간. 2023-03-02 06:41:10과 같이 연월일시분초 순.
1000-01-01 00:00:00.000000 ~ 9999-12-31 23:59:59.999999
8bytes  
TIMESTAMP 1970-01-01 00:00:00.000000 ~ 2038-01-19 03:14:07.999999 UTC 4bytes time_zone 시스템 변수와 관련해 지역별 시간대로 저장 가능
TIME 시간. 06:41:10과 같이 시분초 순. 3bytes  
YEAR 연도. ‘YYYY’형식으로 1,905 ~ 2,155 1byte  


기타

자료형 설명 크기 비고
GETMETRY 공간 데이터. 선, 점, 면적을 가진 다각형과 같은 공간 데이터를 저장.    
JSON JSON 문서 및 배열 타입 저장. 8bytes  


추가 설명


ENUM

1
2
3
4
5
6
7
8
9
10
11
12
13
14
-- ENUM 칼럼 생성 및 입력 테스트

CREATE TABLE test(
    food ENUM('햄버거', '피자', '콜라')
);

INSERT INTO test (food) VALUES ('햄버거');
--> 정상 입력

INSERT INTO test (food) VALUES ('콜라');
--> 정상 입력

INSERT INTO test (food) VALUES ('김밥');
--> 열거되지 않은 값. 입력 불가능
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
-- ENUM은 인덱스-값 형태로 저장됨

CREATE TABLE test(
    food ENUM('햄버거', '피자', '콜라')
);

SELECT food, food+0 FROM test;

+-----------+-------------+
|    food   |   food+0    |
+-----------+-------------+
| 햄버거      |           1 |
| 피자       |           2 |
| 콜라       |           3 |
+-----------+-------------+

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
-- ENUM의 연산

CREATE TABLE test(
    food ENUM('햄버거', '피자', '콜라')
);


SELECT food FROM test WHERE food < 2;
+-----------+
|    food   |
+-----------+
|    햄버거   |
+-----------+

SELECT food FROM test WHERE food <3;
+-----------+
|    food   |
+-----------+
|    햄버거   |
|    피자    |
+-----------+

SELECT food FROM test WHERE food <'햄버거';
+-----------+
|    food   |
+-----------+
|    피자    |
|    콜라    |
+-----------+

SELECT food FROM test WHERE food <'콜라';
--> Empyty set

SELECT food FROM test WHERE food <'파도솔레라미시';
+-----------+
|    food   |
+-----------+
|    콜라    |
+-----------+


SET

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
CREATE TABLE test(
    food SET('햄버거', '피자', '콜라')
);


INSERT INTO test (food) VALUES ('햄버거');
--> 정상 입력

INSERT INTO test (food) VALUES ('피자');
--> 정상 입력

INSERT INTO test (food) VALUES ('콜라');
--> 정상 입력

INSERT INTO test (food) VALUES ('햄버거,콜라');
--> 정상 입력

INSERT INTO test (food) VALUES ('콜라,햄버거');
--> 정상 입력

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
SELECT food, food+0 FROM test;

+------------------+--------+
| food             | food+0 |
+------------------+--------+
|                  |      0 |
|                  |      0 |
|                  |      0 |
| 햄버거             |      1 |
| 피자              |      2 |
| 콜라              |      4 |
| 햄버거,콜라         |      5 |
| 햄버거,콜라         |      5 |
| 피자,콜라          |      6 |
+------------------+--------+

ENUM과 같이 각 문자열에 대해 index 값이 주어지나,
허용된 입력값끼리의 조합의 경우,
조합 index = 문자열1의index + 문자열2의index ...
와 같이 index 가 매겨진다.

예를 들어 햄버거,콜라의 index는 5이며 이는
햄버거(1) 콜라(4) 의 index를 더한 값이다.

비교해서 피자,콜라의 index는 6이며 이는
피자(2) 콜라(4) 의 index를 더한 값이다.


Reference

  • MySQL 공식 문서
  • https://interconnection.tistory.com/100
  • https://devdhjo.github.io/mysql/2020/01/30/database-mysql-003.html
  • https://konkukcodekat.tistory.com/entry/mySQL-%EC%A3%BC%EC%9A%94-%EB%8D%B0%EC%9D%B4%ED%84%B0%ED%83%80%EC%9E%85%EC%9E%90%EB%A3%8C%ED%98%95
  • https://inpa.tistory.com/entry/MYSQL-%F0%9F%93%9A-%EC%9E%90%EB%A3%8C%ED%98%95-%ED%83%80%EC%9E%85-%EC%A2%85%EB%A5%98-%EC%A0%95%EB%A6%AC
  • https://bskyvision.com/entry/MariaDB-enum-%EB%8D%B0%EC%9D%B4%ED%84%B0-%ED%83%80%EC%9E%85
  • https://edykim.com/ko/post/using-the-mysql-enum-type-in-the-where-clause/
  • http://www.tcpschool.com/mysql/mysql_basic_insert
  • https://soft33.tistory.com/entry/MYSQL-SET-%ED%83%80%EC%9E%85-%EA%B4%80%EB%A0%A8