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