💾 Backend/DB, SQL

SQL 데이터 타입 정리

hjinn0813 2024. 10. 28. 14:50
728x90

회사에서 사용하는 HeidiSQL과 MariaDB로 데이터를 직접 만들어보라고 사수님께 제안받아서, 햇병아리 FE 개발자인 나는 얼떨결에 백엔드 공부를 시작하게 되었다. 앞서 API로 만든 프로배구팀 선수명단 JSON 데이터를 HeidiSQL로 DB화했고, 이후에는 개인적으로 관심이 있는 다른 2개 구단의 데이터까지 DB화했다. HeidiSQL로 테이블을 만들면서 데이터 타입이 각각 어떤 의미인지 궁금해져서 정리해보는 글.✍


SQL 데이터 타입

정수형 (Integer Types)

말 그대로 정수값을 저장하는 데이터. 음수 부호가 있는 경우와 없는 경우에 저장 가능한 값이 다르다.

TINYINT 매우 작은 정수
부호 있는 경우 -128 ~ 127
부호 없는 경우 0 ~ 255
SMALLINT 작은 정수
부호 있는 경우 -32,768 ~ 32,767
부호 없는 경우 0 ~ 65,535
MEDIUMINT 중간 크기의 정수
부호 있는 경우 -8,388,608 ~ 8,388,607
부호 없는 경우 0 ~ 16,777,215
INT 일반적인 정수형
부호 있는 경우 -2,147,483,648 ~ 2,147,483,647
부호 없는 경우 0 ~ 4,294,967,295
BIGINT 매우 큰 정수형
부호 있는 경우 -2^63 ~ 2^63-1
부호 없는 경우 0 ~ 2^64-1
BIT 비트로 표현되는 데이터.
예를 들어 논리적 TRUE(1) / FALSE(0) 값을 저장할 때 사용.

실수형 (Floating Point Types)

소수점을 포함한 값들을 저장할 수 있는 데이터

FLOAT 단정밀도 부동 소수점 (4바이트)
소수점 이하의 정확도가 상대적으로 낮고, 7자리 정도의 십진수 정밀도를 가진다.
온도, 거리처럼 작은 소수점 값이나 계산의 정확도가 크게 중요하지 않은 경우에 사용한다.
DOUBLE 배정밀도 부동 소수점 (8바이트)
소수점 이하의 정확도가 높고, 15자리 정도의 십진수 정밀도를 가진다.
과학적 계산이나 천문학적인 날짜 등 정확한 계산이 중요한 경우에 사용한다.
DECIMAL 정밀한 소수점을 위해 사용하는 고정 소수점 수.
저장할 숫자의 전체 자릿수와 소수점 이하 자릿수를 설정할 수 있다.
예를 들어 DECIMAL(10, 2)는 최대 10자리 숫자 중 2자리는 소수점 이하로 저장할 수 있다는 의미.
가격, 세금 계산처럼 소수점 오차가 없어야 하는 경우에 사용한다.

텍스트 (Text Types)

문자열을 저장할 수 있는 데이터 타입. 가변 길이와 고정 길이로 나눌 수 있다.

VARCHAR 가변 길이 문자열, 최대 길이를 설정해야 한다.
예를 들어 VARCHAR(10)으로 설정하면 공백없이 문자열 길이만큼의 공간만 차지한다.
길이가 일정하지 않은 짧은 텍스트(이름, 주소 등)에 적합하다.
CHAR 고정 길이 문자열, 설정한 길이에 맞춰 공간을 항상 차지한다.
예를 들어 CHAR(10)으로 설정하면 글자가 5개만 있어도 공백을 채워서 10자리를 만든다.
짧은 문자열이나 고정된 길이 데이터에 유리하다.
TINYTEXT 가변 길이 문자열, 내용의 길이만큼만 차지한다. 최대 255자 저장.
TEXT 가변 길이 문자열, 내용의 길이만큼만 차지한다.
설명이나 본문 같은 긴 텍스트 데이터에 유리하다.
최대 65,535자까지 저장 가능
MEDIUMTEXT 가변 길이 문자열, 내용의 길이만큼만 차지한다. 최대 16,777,215자 저장.
LONGTEXT 가변 길이 문자열, 내용의 길이만큼만 차지한다. 최대 4GB 저장.
JSON JSON 형식의 구조화된 데이터를 저장.
UUID Universally Unique Identifier. 중복되지 않는 특별한 코드를 만드는 방식.
16바이트 크기의 숫자이고, 36자리 문자 조합으로 표현된다.
주로 고유한 ID나 식별키로서 사용자 ID나 주문번호를 중복없이 생성하고 싶은 경우에 사용한다.

바이너리 (Binary Types)

파일, 이미지, 동영상과 같은 "바이너리 데이터"를 저장할 때 사용한다. 바이너리 데이터는 텍스트가 아닌 파일 데이터(0과 1로 이루어진 데이터).

BINARY 고정 길이 바이너리 데이터.
정해진 길이를 갖기 때문에 지정해놓은 데이터의 크기에 맞춰 공간을 항상 차지한다.
예를 들어, BINARY(10)으로 설정하면 데이터가 5바이트여도 항상 10바이트를 사용해 저장하고, 남는 공간은 공백으로 채운다.
해시값, 암호화된 데이터처럼 고정된 크기의 이진 데이터 저장에 사용한다.
VARBINARY 가변 길이 바이너리 데이터.
저장하는 데이터의 크기에 따라 필요한 만큼의 공간만 사용한다.
예를 들어, VARBINARY(10)으로 설정하면 최대 10바이트까지 저장할 수 있지만 실제 저장되는 데이터의 크기만큼만 차지한다.
TINYBLOB 작은 바이너리 객체 (최대 255바이트).
BLOB Binary Large Object.
큰 바이너리 객체 (최대 65,535바이트).
MEDIUMBLOB 중간 크기 바이너리 데이터 (최대 16MB).
LONGBLOB 대용량 바이너리 데이터 (최대 4GB).

시간형 (Date and Time Types)

날짜와 시간을 표현할 때 사용하는 데이터 타입.

DATE 연월일 정보 (YYYY-MM-DD 형식).
TIME 시분초 정보 (HH:MM 형식).
YEAR 연도 정보 (YYYY 형식).
DATETIME 날짜와 시간 정보 (YYYY-MM-DD HH:MM 형식).
TIMESTAMP 날짜와 시간 정보 + UTC로 변환된 시간.
일반적으로 데이터 생성 또는 업데이트 시의 타임스탬프를 기록할 때 사용한다.

공간/기하학형 (Spatial/Geometric Types)

위치 기반 서비스나 지도 앱 같은 곳에서, 위치나 지형 관련 데이터를 다룰 때 사용한다.

POINT 특정 위치를 나타내는 점(좌표) 데이터.
LINESTRING 두 지점을 연결한 직선 또는 곡선 데이터.
POLYGON 다각형 데이터, 구역을 나타내는 닫힌 영역.
도시 경계, 건물 영역, 국가 경계 등을 지정할 때 사용한다.
GEOMETRY 여러 종류의 기하학적 형태를 저장할 수 있는 타입.
MULTIPOINT 여러 점(좌표)을 나타내는 데이터.
MULTILINESTRING 여러 선을 포함하는 데이터.
MULTIPOLYGON 여러 다각형을 포함하는 데이터.
GEOMETRYCOLLECTION 여러 점, 선, 다각형 데이터를 함께 관리할 수 있다.
예를 들어, 공원의 경계선과 그 안에 있는 산택로를 하나의 데이터로 묶어 표현할 수 있다.

기타 (Other Types)

특정한 목적에 맞는 데이터 유형.

UNKNOWN 알 수 없는 유형. 어떤 데이터 유형인지 정확히 정의되지 않은 경우.
ENUM 열거형, 미리 정의된 값 중 하나를 선택할 수 있는 데이터 유형.
예를 들어, 성별을 저장할 때 ENUM('남', '여')로 설정하면, '남' 또는 '여'만 저장할 수 있다.
SET 여러 값의 조합을 허용하는 데이터 유형.
미리 정의된 여러 값 중에서 여러 개를 동시에 선택할 수 있다.
예를 들어, 취미를 저장할 때 SET('축구', '농구', '독서')로 설정하면 '축구'와 '독서' 동시 저장 가능.
728x90