데이터베이스 설계를 위해서는 저장해야 할 정보의 자료를 분석하여 적절한 데이터 타입을 선택해야 합니다. 기본적인 데이터 타입은 크게 숫자형, 문자형, 날짜와 시간, 기타 특수 형으로 나눌 수 있습니다. 그중에서 숫자와 문자는 자주 사용하는 데이터 타입으로 데이터 타입 간에 지원하는 범위를 알고 있어야만 저장하려는 데이터 저장 범위에 맞게 사용할 수 있습니다.
MariaDB의 경우 숫자형과 문자형의 경우 아주 세부적으로 범위를 나누어 저장할 수 있도록 데이터 타입을 지원하고 있습니다. 가능하면 주요한 데이터형의 지원 범위는 기억해두는 것이 좋기에 정리하여 둡니다.
자주 사용하는 데이터형의 경우 ● 와 함께 행의 글자에 색상을 변경하였습니다.
1. 숫자 데이터 타입
데이터 형식 |
Bytes | 범위 | 설명 |
BIT(N) | N/8 | 1 ~ 64bit를 표현. b'0000' 형식으로 표현 | |
TINYINT | 1 | -128 ~ 127 | 정수 |
● SMALLINT | 2 | -32,768 ~ 32,767 |
정수 |
MEDIUMINT | 3 | -8,388,608 ~ 8,388,607 |
정수 |
● INT INTEGER |
4 | -21억 ~ 21억 | 정수 |
● BIGINT | 8 | -900경 ~ 900경 | 정수 |
● FLOAT | 4 | -3.40E+38 ~ -1.17E-38 |
소수점 아래 7자리까지 표현 근사치의 숫자를 저장, 큰 숫자 저장 |
● DOUBLE REAL |
8 | -1.22E-308 ~ 1.79E+308 |
소수점 아래 15자리까지 표현 근사치의 숫자를 저장, 큰 숫자 저장 |
● DECIMAL(m, [d]) NUMERIC(m, [d]) |
5~17 | -10e38+1 ~ 10e38-1 |
전체 자릿수(m)와 소수점 이하 자릿수(d)를 가진 숫자형 정확한 수치를 저장 ex) decimal(5,2) 전체 자릿수 5자리, 그 중 소수점 이하를 2자리로 표현 |
소수점이 들어간 실수를 저장하려면 되도록 DECIMAL을 사용하는 것이 바람직하다.
부호 없는 정수를 지원, UNSIGNED 키워드를 앞에 붙여주면 된다.
- TINYINT : 0 ~ 255
- SMALLINT : 0 ~ 65,535
- MIDIUMINT : 0 ~ 16,777,215
- INT : 0 ~ 약 42억
- BIGINT : 0 ~ 약 108경
- FLOAT, DOUBLE, DECIMAL도 UNSINGED를 지원하지만 잘 사용되지 않는다.
2. 문자 데이터 타입
데이터 형식 |
구분 | Bytes | 설명 |
● CHAR(n) | 1~255 | 고정길이 문자형 n을 1부터 255까지 지정 CHAR만 표기하면 CHAR(1)과 동일 |
|
● VARCHAR(n) | 1~65535 | 가변길이 문자형 n은 1부터 65535까지 지정 |
|
BINARY(n) | 1~255 | 고정길이의 이진 데이터 값 | |
VARBINARY(n) | 1~255 | 가변길이의 이진 데이터 값 | |
TEXT 형식 | TINYTEXT | 1~255 | 255 크기의 TEXT 데이터 값 |
TEXT | 1~65535 | N 크기의 TEXT 데이터 값 | |
MEDIUMTEXT | 1 ~ 16777215 |
16,777,215 크기의 TEXT 데이터 값 | |
● LONGTEXT | 1 ~ 4294967295 |
최대 4GB 크기의 TEXT 데이터 값 | |
BLOB 형식 | TINEBLOB | 1~255 | 255 크기의 BLOB데이터 값 |
BLOB | 1~65535 | N 크기의 BLOB데이터 값 | |
MEDIUMBLOB | 1~ 16777215 |
16,777,215 크기의 BLOB 데이터 값 | |
● LONGBLOB | 1 ~ 4294967295 |
최대 4GB 크기의 BLOB 데이터 값 | |
ENUM(값들...) | 1 or 2 | 최대 65535개의 열거형 데이터 값 | |
SET(값들...) | 1,2,3,4,8 | 최대 64개의 서로 다른 데이터 값 |
CHAR 형은 고정길이 문자형으로 자릿수가 고정되어 있다.
- CHAR(100)에 'ABC'를 저장하면 100 Bytes를 확보하고 3자리만 사용한 다음 나머지 97 자리는 낭비하게 된다.
- CHAR 형은 INSERT/UPDATE에 일반적으로 더 좋은 성능을 발휘한다.
LONGTEXT, LONGBLOB
- MariaDB에서는 LOB(Large OBject : 대량의 데이터)를 LONGTEXT와 LONGBLOB로 지원한다.
- 약 4GB 크기의 파일을 하나의 데이터로 저장할 수 있다.
- 텍스트 타입의 데이터는 LONGTEXT를 사용한다
- 사진, 동영상과 같은 바이너리 파일은 LONGBLOB를 사용한다.
MariaDB의 문자 세트(Character Set)
- 기본적으로 CHAR, VARCHAR모두 UTF-8에서 영문, 한글 등에 따라서 내부적으로 저장 크기가 달라진다.
- 사용자 입장에서 CHAR(100)은 영문, 한글 구분 없이 100글자를 저장하므로 내부적인 저장 크기는 신경 쓸 필요가 없다.
3. 날짜와 시간 데이터 타입
데이터 형식 |
Bytes | 설명 |
● DATE | 3 | 1001-01-01 ~ 9999-12-31까지 저장됨. 날짜 형식만 사용. 'YYYY-MM-DD'형식으로 사용. |
TIME | 3 | -838:59:59.000000 ~ 838:59:59.000000까지 저장. 'HH:MM:SS'형식으로 사용. |
● DATETIME | 8 | 1001-01-01 00:00:00 ~ 9999-12-31 23:59:59까지 저장. 'YYYY-MM-DD HH:MM:SS'형식으로 사용. |
TIMESTAMP | 4 | 1001-01-01 00:00:00 ~ 9999-12-31 23:59:59까지 저장. 'YYYY-MM-DD HH:MM:SS'형식으로 사용. time_zone 시스템 변수와 관련이 있으며 UTC 시간대로 변환하여 저장. |
YEAR | 1 | 1901~2155까지 저장 'YYYY'형식으로 사용 |
4. 기타 데이터 타입
데이터 형식 |
Bytes | 설명 |
GEOMETRY | N/A | 공간 데이터 형식으로 선, 점 및 다각형 같은 공간 데이터 객체를 저장하고 조작. |
JSON | 8 | JSON (JavaScript Object Notiation) 문서를 저장 MariaDB 10.2.7 버전 부터 지원 |
'Dev. Handbook > SQL, Oracle, MariaDB' 카테고리의 다른 글
[MySQL, MariaDB] MySQL, MariaDB 버전별 호환성 (0) | 2022.11.05 |
---|---|
[Oracle] 내장함수 : 집계함수(그룹함수) (0) | 2022.05.23 |
[Oracle] 내장함수 : 비교함수, 디코딩 함수 (0) | 2022.05.22 |
[Oracle] 내장 함수 : NULL 관련 함수 (1) | 2022.05.14 |
[Oracle] 내장 함수 : 형 변환 함수 (0) | 2022.05.13 |
댓글