Database
Database - Chapter 2-13. MySQL 데이터 타입
Chansman
2025. 3. 19. 16:18
🚀 MySQL 데이터 타입
1️⃣ 숫자형 데이터 타입 🔢
데이터 타입설명
BIT(M) | 이진 값(0 또는 1)을 저장하는 데이터 타입. M은 1~64 사이의 값으로, 해당 비트 수 만큼 이진 값을 저장합니다. |
BOOL | 0은 false, 그 외의 값은 true로 간주합니다. MySQL에서 BOOLEAN은 TINYINT(1)의 별칭입니다. |
TINYINT(M) | 1바이트 정수, -128 ~ 127 (부호 있음), 0 ~ 255 (부호 없음) 범위. |
SMALLINT(M) | 2바이트 정수, -32768 ~ 32767 (부호 있음), 0 ~ 65535 (부호 없음) 범위. |
MEDIUMINT(M) | 3바이트 정수, -8388608 ~ 8388607 (부호 있음), 0 ~ 16777215 (부호 없음) 범위. |
INT(M) or INTEGER(M) | 4바이트 정수, -2147483648 ~ 2147483647 (부호 있음), 0 ~ 4294967295 (부호 없음) 범위. |
BIGINT(M) | 8바이트 정수, -92233720036854775808 ~ 92233720036854775807 (부호 있음), 0 ~ 18446744073709551615 (부호 없음) 범위. |
DECIMAL(M, D) or NUMERIC | 고정 소수점 숫자. M은 정밀도, D는 소수점 자릿수를 나타냅니다. 최대 65자리 숫자까지 저장 가능합니다. |
추가 설명:
- **DECIMAL**과 NUMERIC 타입은 실수 계산에서 발생할 수 있는 오차를 피할 수 있습니다. 예를 들어, 금액이나 정확한 수학적 계산이 필요한 데이터에 적합합니다.
2️⃣ 문자형 데이터 타입 📝
데이터 타입설명
CHAR(M) | 고정 길이 문자열 저장. M은 0~255 사이로, 지정된 길이만큼 문자열을 저장하고, 짧은 문자열은 공백으로 채워집니다. |
VARCHAR(M) | 가변 길이 문자열 저장. M은 0~65,535 사이로, 실제 문자열 길이에 따라 저장 공간을 차지합니다. |
TINYTEXT | 1~255 길이의 가변 길이 문자열. |
TEXT | 1~65,535 길이의 가변 길이 문자열. |
MEDIUMTEXT | 1~16,777,215 길이의 가변 길이 문자열. |
LONGTEXT | 1~429,496,729 길이의 가변 길이 문자열. |
ENUM | 미리 정의된 값 중 하나를 선택하는 문자열. 최대 65,535 개의 항목을 가질 수 있습니다. |
SET | 여러 값을 선택할 수 있는 데이터 타입. 비트 연산을 통해 저장되며, 최대 64개 항목을 가질 수 있습니다. |
추가 설명:
- **ENUM**은 선택 가능한 값이 제한된 경우 사용됩니다. 예를 들어, 성별(남성, 여성), 상태(활성, 비활성) 등을 저장할 때 유용합니다.
- **SET**은 다수의 값이 동시에 저장될 수 있는 타입입니다. 예를 들어, 사용자가 선택한 여러 옵션을 저장할 때 적합합니다.
CHAR vs. VARCHAR 차이
- CHAR는 고정된 길이를 사용하므로, 예를 들어 국가 코드("US", "IN")처럼 길이가 일정한 데이터에 적합합니다.
- VARCHAR는 길이가 유동적인 데이터에 적합합니다. 예를 들어, 사용자의 이름이나 이메일 주소처럼 길이가 다를 수 있는 데이터에 유리합니다.
3️⃣ 날짜형 데이터 타입 📅
데이터 타입설명
DATE | 날짜만 표현하는 타입. 형식은 'YYYY-MM-DD'입니다. 예: 2023-01-01. |
DATETIME | 날짜와 시간을 모두 표현하는 타입. 형식은 'YYYY-MM-DD HH:MM:SS'입니다. 예: 2023-01-01 12:34:56. |
TIMESTAMP | 날짜와 시간을 표현하며, UTC로 저장됩니다. 형식은 'YYYY-MM-DD HH:MM:SS'. |
TIME | 시간만 표현하는 타입. 형식은 'HH:MM:SS'입니다. |
YEAR | 연도만 표현하는 타입. 예: 2023. |
DATETIME과 TIMESTAMP 차이:
- DATETIME: 시간대에 관계 없이 정확한 날짜와 시간을 저장합니다. 예를 들어, 중요한 이벤트 발생 시점을 기록할 때 사용됩니다.
- TIMESTAMP: 서버의 시간대 설정에 따라 변환됩니다. 예를 들어, 사용자의 활동 시간이나 게시물 작성 시간을 기록할 때 유용합니다.
추가 설명:
- **TIMESTAMP**는 자동 갱신이 가능하며, CURRENT_TIMESTAMP와 같은 기본 값을 설정하면, 레코드가 삽입되거나 수정될 때 자동으로 현재 시간이 기록됩니다.
4️⃣ 사용 시 고려사항 🧐
시간대와의 관계
- 국제화된 애플리케이션에서는 **TIMESTAMP**가 유리할 수 있습니다. 시간대 변환을 자동으로 처리하므로 여러 나라에서 사용되는 시스템에서 시간 일관성을 유지하는 데 유리합니다.
범위와 저장 크기
- **DATETIME**은 더 넓은 범위를 커버하며, 8바이트를 차지합니다. 반면, **TIMESTAMP**는 4바이트만 사용하므로 공간이 더 효율적입니다.
자동 갱신
- **TIMESTAMP**는 레코드의 생성/수정 시간을 추적할 때 매우 유용합니다. 예를 들어, 게시글이나 댓글이 작성될 때 **CURRENT_TIMESTAMP**를 자동으로 갱신하여 기록할 수 있습니다.
5️⃣ 실전 예시
DATETIME 사용 예시
sql
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(100),
email VARCHAR(100),
date_of_birth DATETIME
);
- 사용자의 생일을 DATETIME으로 기록하면, 시간대의 영향을 받지 않고 정확한 생일 정보를 저장할 수 있습니다.
TIMESTAMP 사용 예시
sql
CREATE TABLE blog_posts (
id INT AUTO_INCREMENT PRIMARY KEY,
title VARCHAR(255),
content TEXT,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);
- created_at은 처음 생성된 시간이고, updated_at은 게시물이 수정될 때마다 자동으로 갱신됩니다.