▶ MySQL References |
MySQL Data Types |
MySQL Functions |
MySQL Data Types
MySQL Data Types: 데이터 타입 종류와 설명
MySQL에서 데이터를 저장할 때 적절한 데이터 타입을 선택하는 것은 매우 중요합니다. 데이터 타입에 따라 데이터가 저장되는 방식, 데이터의 크기, 성능 등에 영향을 미치기 때문입니다. MySQL은 크게 세 가지 범주로 데이터를 분류할 수 있습니다: 숫자, 날짜 및 시간, 문자열(텍스트). 이 글에서는 각 데이터 타입에 대한 설명과 특징을 제공하겠습니다.
1. 숫자 데이터 타입 (Numeric Data Types)
숫자 데이터 타입은 정수와 실수(소수점이 포함된 수)를 저장할 수 있습니다. 숫자 데이터 타입은 부호(음수와 양수) 여부에 따라 다양한 크기를 가질 수 있습니다.
1.1 정수 데이터 타입 (Integer Types)
정수는 소수점이 없는 숫자입니다. MySQL은 여러 크기의 정수 데이터 타입을 제공합니다.
- TINYINT: 1바이트 크기의 작은 정수
- 범위: -128 ~ 127 (부호 있을 때), 0 ~ 255 (부호 없을 때)
- SMALLINT: 2바이트 크기의 작은 정수
- 범위: -32,768 ~ 32,767 (부호 있을 때), 0 ~ 65,535 (부호 없을 때)
- MEDIUMINT: 3바이트 크기의 정수
- 범위: -8,388,608 ~ 8,388,607 (부호 있을 때), 0 ~ 16,777,215 (부호 없을 때)
- INT (또는 INTEGER): 4바이트 크기의 일반 정수
- 범위: -2,147,483,648 ~ 2,147,483,647 (부호 있을 때), 0 ~ 4,294,967,295 (부호 없을 때)
- BIGINT: 8바이트 크기의 큰 정수
- 범위: -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807 (부호 있을 때), 0 ~ 18,446,744,073,709,551,615 (부호 없을 때)
1.2 실수 데이터 타입 (Floating-Point and Fixed-Point Types)
실수는 소수점을 포함하는 숫자입니다.
- FLOAT(M,D): 4바이트 크기의 부동 소수점
M
은 전체 자릿수,D
는 소수 자릿수- 예:
FLOAT(7,4)
는 최대 7자리 중 소수점 이하 4자리까지 나타낼 수 있음 (예:123.4567
).
- DOUBLE (또는 REAL): 8바이트 크기의 부동 소수점
- 더 큰 정밀도의 실수를 저장할 수 있음.
- DECIMAL(M,D) 또는 NUMERIC(M,D): 고정 소수점 실수
M
은 전체 자릿수,D
는 소수 자릿수.- 고정된 소수 자릿수를 가지며, 금융 데이터나 높은 정밀도가 필요한 경우 사용.
2. 날짜 및 시간 데이터 타입 (Date and Time Types)
날짜와 시간 데이터를 다룰 때 MySQL에서 제공하는 여러 데이터 타입이 있습니다.
- DATE: 날짜를 저장하는 데이터 타입 (형식:
YYYY-MM-DD
)- 예:
2024-10-11
- 예:
- TIME: 시간을 저장하는 데이터 타입 (형식:
HH:MM:SS
)- 예:
12:45:30
- 예:
- DATETIME: 날짜와 시간을 함께 저장 (형식:
YYYY-MM-DD HH:MM:SS
)- 예:
2024-10-11 12:45:30
- 예:
- TIMESTAMP: 날짜와 시간을 UTC 기준으로 저장하고, 타임존을 자동으로 변환
1970-01-01 00:00:01 UTC
이후 시간을 저장- 자동으로 현재 시간으로 업데이트되거나 트리거로 사용할 수 있음.
- YEAR(M): 연도를 저장하는 데이터 타입
YEAR(4)
는 4자리 연도(예:2024
)를 저장YEAR(2)
는 2자리 연도(예:99
)를 저장 (1999 또는 2099로 해석됨)
3. 문자열 데이터 타입 (String Data Types)
문자열 데이터 타입은 텍스트 또는 바이너리 데이터를 저장하는 데 사용됩니다.
3.1 텍스트 데이터 타입
- CHAR(M): 고정 길이 문자열 (최대 255자)
- 길이가 항상 고정되어 있으며, 빈 공간은 공백으로 채움.
- VARCHAR(M): 가변 길이 문자열 (최대 65,535자)
- 실제 데이터 길이만큼만 저장되며, 효율적.
- TEXT: 대용량 텍스트 데이터를 저장 (최대 65,535자)
- 매우 긴 텍스트 데이터(예: 블로그 글)를 저장하는 데 사용.
- TINYTEXT: 작은 크기의 텍스트 데이터 (최대 255자)
- MEDIUMTEXT: 중간 크기의 텍스트 데이터 (최대 16,777,215자)
- LONGTEXT: 매우 큰 크기의 텍스트 데이터 (최대 4,294,967,295자)
3.2 바이너리 데이터 타입
- BINARY(M): 고정 길이의 바이너리 데이터 저장
- CHAR와 유사하지만, 텍스트가 아닌 이진 데이터를 저장.
- VARBINARY(M): 가변 길이의 바이너리 데이터 저장
- VARCHAR와 유사하지만, 이진 데이터를 저장.
- BLOB: 바이너리 데이터를 저장 (최대 65,535바이트)
- 큰 바이너리 데이터(예: 이미지, 파일)를 저장하는 데 사용.
- TINYBLOB: 작은 크기의 바이너리 데이터를 저장 (최대 255바이트)
- MEDIUMBLOB: 중간 크기의 바이너리 데이터를 저장 (최대 16,777,215바이트)
- LONGBLOB: 매우 큰 크기의 바이너리 데이터를 저장 (최대 4,294,967,295바이트)
4. 기타 데이터 타입
- ENUM('value1', 'value2', ...): 열거형 데이터 타입. 사전에 정의된 값 중 하나를 선택할 수 있음.
- 예:
ENUM('small', 'medium', 'large')
- 예:
- SET('value1', 'value2', ...): 여러 값을 선택할 수 있는 데이터 타입. 사전에 정의된 값 중에서 하나 이상의 값을
선택할 수 있음.
- 예:
SET('a', 'b', 'c')
→ 'a', 'b', 'c' 중 하나 또는 여러 값을 저장 가능.
- 예:
데이터 타입 선택 시 고려사항
- 데이터 크기 최적화: 데이터 타입을 선택할 때 데이터 크기를 고려하는 것이 중요합니다. 불필요하게 큰 데이터 타입을 사용하면 스토리지 공간을 낭비할 수 있습니다.
- 정밀도: 금융 데이터나 과학적 계산에서는
DECIMAL
이나NUMERIC
과 같은 고정 소수점 타입을 사용하는 것이 좋습니다. 부동 소수점 타입(FLOAT, DOUBLE)은 정밀도에 한계가 있습니다. - 인덱싱 및 성능: 문자열 타입이 너무 길면 인덱싱 성능에 영향을 미칠 수 있습니다. 자주 인덱싱되는 컬럼에는
CHAR
또는 짧은VARCHAR
를 사용하는 것이 좋습니다.
요약
MySQL에서는 다양한 데이터 타입을 제공하여 데이터를 효율적으로 저장하고 관리할 수 있습니다. 숫자, 날짜 및 시간, 문자열 데이터는 각각의 목적에 맞는 타입을 선택해야 하며, 데이터 크기와 성능을 고려하여 적절한 데이터 타입을 사용하는 것이 중요합니다.