...
숫자 데이터 형식
- DECIMAL은 정확한 수치를 저장하지만 FLOAT, REAL은 근사치 값을 저장합니다.
- 대신에 FLOAT, REAL은 더 큰 숫자를 저장할 수 있습니다.
- 부호없는 숫자를 저장할 때에는 UNSIGNED 예약어를 같이 사용합니다.
데이터 타입 | 바이트 수 | 숫자 범위 | 설명 |
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 | -1038+1 ~ +1038-1 | 전체 자릿수(m)와 소수점 이하 자릿수(d)를 가진 숫자형 예) decimal(5, 2)는 자릿수 5자리로 하되 소숫점 이하를 2자리로 합니다. >> 673.21 |
문자 데이터 형식
- VARCHAR은 UTF-8의 형태를 지니므로 입력한 글자의 언어에 따라 내부적으로 크기가 달라집니다.
- 따라서 CHAR(100)은 한글 영어 상관 없이 100글자를 의미합니다.
- BLOB(Binary Large Object)는 사진, 동영상, 문서 파일 등의 대용량 이진 데이터를 저장하는데 사용합니다.
데이터 타입 | 바이트 수 | 설명 | |
CHAR(n) | 1 ~ 255 | 고정길이 문자형. n을 1부터 255까지 지정. CHARACTER의 약자이며, CHAR 이라고만 하면 CHAR(1)과 동일 CHAR(100) 인 경우 세 자리만 사용해도 나머지 97 자리를 할당. 성능은 CHAR이 VARCHAR보다 더 좋음. |
|
VARCHAR(n) | 1 ~ 65535 | 가변길이 문자형. n을 사용하면 1부터 65535까지 지정 Variable Character의 약자. VARCHAR(100) 인 경우 3글자를 저장하는 경우 3자리의 데이터 공간만 사용 |
|
BINARY(n) | 1 ~ 255 | 고정길이 이진 데이터 값 | |
VARBINARY(n) | 1 ~ 255 | 가변길이 이진 데이터 값 | |
TEXT |
TINYTEXT | 1 ~ 255 | 255 크기의 TEXT 데이터 값 |
TEXT | 1 ~ 65535 | N 크기의 TEXT 데이터 값 | |
MEDIUMTEXT | 1 ~ 16777215 | 16777215 크기의 TEXT 데이터 값 | |
LONGTEXT | 1 ~ 4294967295 | 최대 4GB 크기의 TEXT 데이터 값 | |
BLOB | TINYBLOB | 1 ~ 255 | 255 크기의 BLOB 데이터 값 |
TEXT | 1 ~ 65535 | N 크기의 BLOB 데이터 값 | |
MEDIUMBLOB | 1 ~ 16777215 | 16777215 크기의 BLOB 데이터 값 | |
LONGBLOB | 1 ~ 4294967295 | 최대 4GB 크기의 BLOB 데이터 값 | |
ENUM(값들..) | 1 또는 2 | 최대 65535개의 열거형 데이터 값 | |
SET(값들..) | 1, 2, 3, 4, 8 | 최대 64개의 중복되지 않는 데이터 값 |
날짜와 시간 데이터 형식
데이터 형식 | 바이트 수 | 설명 |
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' 형식으로 사용. |
기타 데이터 형식
데이터 형식 | 바이트 수 | 설명 |
GEOMETRY | N/A | 공간 데이터 형식으로 선, 점 및 다각형 같은 공간 데이터 개체를 저장 |
JSON | 8 | JSON 문서를 저장. MySQL 5.7.8 부터 지원. 배열 타입 역시 지원 |
DB에서 Json 을 언제 사용하는 것이 좋을까?
- 빠른 조회보다 데이터의 저장에 중점을 두는 데이터
- 변화가 없으면서 정형화되지 않으면서 다양한 형식을 변화가 요구되는 데이터
- 어플리케이션을 통해 데이터를 처리하고 DB에는 단순한 저장이 요구되는 데이터
- 지속적인 데이터의 형식에 변화가 가능한 데이터
-- json 테이블
CREATE TABLE `testschema`.`jsontable` (
`id` INT NOT NULL AUTO_INCREMENT,
`name` VARCHAR(45) NULL,
`jsoncol` JSON NULL,
PRIMARY KEY (`id`)
);
-- json 값 넣기
INSERT INTO `testschema`.`jsontable`(`name`, `jsoncol`) VALUES ("json_string", '{"a": "A", "b":"B"}');
-- 배열 값 넣기
INSERT INTO `testschema`.`jsontable`(`name`, `jsoncol`) VALUES ("json_object with json_array", json_object("a", JSON_ARRAY(1,2,3), "b", "B"));
-- json 조회
select id, name, jsoncol FROM testschema.jsontable;
-- json 특정 키 조회
select id, name, json_extract(jsoncol, '$.a') FROM testschema.jsontable;
인용한 부분에 있어 만일 누락된 출처가 있다면 반드시 알려주시면 감사하겠습니다
이 글이 좋으셨다면 구독 & 좋아요
여러분의 구독과 좋아요는
저자에게 큰 힘이 됩니다.