Database

[MySQL] 데이터 타입과 형 변환

Jinn 2023. 11. 5. 16:24
숫자형
데이터 타입 바이트 수 숫자 범위 설명
BIT(N) N/8   1~64bit를 표현
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 -10^38+1 ~ +10^38-1 전체 자릿수(m)와 소수점 이하 자릿수(d)를 사진 숫자형

 

DECIMAL은 정확한 수치를 저장하고, FLOAT나 DOUBLE은 근사치의 숫자를 저장한다.

따라서 실수를 저장하려면 DECIMAL을 사용하는 것이 바람직하다.

 

문자형
데이터 타입 바이트 수 설명
CHAR(n) 1 ~ 255 고정길이 문자형. 1부터 255까지 지정.
VARCHAR(n) 1 ~ 65535 가변길이 문자형. 1부터 65535까지 지정.
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 ~ 429467295 최대 4GB 크기의 text 데이터 값
BLOB TINYBLOB 1 ~ 255 255 크기의 BLOB 데이터 값
BLOB 1 ~ 65535 N 크기의 BLOB 데이터 값
MEDIUMBLOB 1 ~ 16777215 16777215 크기의 BLOB 데이터 값
LONGBLOB 1 ~ 429467295 최대 4GB 크기의 BLOB 데이터 값
ENUM(v1, ...) 1 또는 2 최대 65535개의 열거형 데이터 값
SET(v1, ...) 1, 2, 3, 4, 8 최대 64개의 서로 다른 데이터 값

 

공간을 효율적으로 운영하기에는 CHAR보다 VARCHAR가 더 좋지만, INSERT/UPDATE 시에 CHAR가 일반적으로 더 좋은 성능을 발휘한다.

 

BLOB(Binary Large OBject)은 사진, 동영상, 문서 등 대용량 이진 데이터를 저장하는 데 사용된다.

 

날짜와 시간
데이터 형식 바이트 수 설명
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' 형식으로 사용. UTC 시간대 변환하여 저장.
YEAR 1 1901 ~ 2155까지 저장. 'YYYY' 형식으로 사용.

 

 

기타
데이터 타입 바이트 수 설명
GEOMETRY N/A 공간 데이터 개체를 저장.
JSON 8 JSON 문서 저장.

형 변환
CAST (표현식 AS 데이터타입 [(길이)])
CONVERT (표현식, 데이터타입 [(길이)])

CAST 함수 또는 CONVERT 함수를 사용해서 형 변환을 할 수 있다.

 

사용 예1
SELECT AVG(amount) '평균 구매 개수' FROM buytbl;

SELECT CAST(AVG(amount) AS SIGNED INTEGER) '평균 구매 개수' FROM buytbl;
-- 또는 --
SELECT CONVERT(AVG(amount), SIGNED INTEGER) '평균 구매 개수' FROM buytbl;