1. 정수형(Integer)
숫자를 정수로 저장할 때 사용한다. 중요한 건 메모리 크기와 범위!
- TINYINT (1byte) : -128 ~ 127
- SMALLINT (2byte) : -32,768 ~ 32,767
- INT (4byte) : 약 -21억 ~ 21억
- BIGINT (8byte) : 약 -900경 ~ 900경
create table `integer` (
t_col tinyint,
s_col smallint,
i_col int,
b_col bigint
);
insert into `integer`
value (127, 32767, 200000000, 9000000000000);
-- 아래 쿼리는 오류 발생
insert into `integer`
value (128, 32767, 200000000, 9000000000000);
-- Error Code: 1264. Out of range value
✅ Tip: 부호 없는 정수는 UNSIGNED
음수가 필요 없는 경우, 같은 바이트 수로 두 배 범위를 확보할 수 있음.
create table person(
age tinyint unsigned, -- 0 ~ 255
height smallint unsigned -- 0 ~ 65535
);
2. 문자형 (CHAR, VARCHAR, TEXT)
문자열은 고정 길이냐 가변 길이냐로 나뉜다.
- CHAR(n) : 항상 n자리를 차지. 성별 코드, 국가코드 등 길이가 일정한 데이터에 적합
- VARCHAR(n) : 필요한 만큼만 저장. 주소, 제품명처럼 길이가 유동적인 데이터에 적합
- TEXT, LONGTEXT : 대용량 텍스트
- BLOB, LONGBLOB : 이미지, 파일 등 바이너리 데이터
create table `character` (
name varchar(100),
category char(10),
description text,
image blob
);
✅ 한글 저장 시 주의사항
UTF-8 기준 한글은 한 글자당 약 3바이트.
VARCHAR(255)면 대략 85글자까지 저장 가능하다는 뜻이다.
3. 실수형 (FLOAT, DOUBLE, DECIMAL)
소수점이 있는 수를 다룰 때 사용.
정확성 요구 여부에 따라 타입을 선택한다.
- FLOAT(p, s) : 소수점 이하 2자리, 총 7자리까지 표현
- DOUBLE(p, s) : 소수점 이하 4자리, 총 10자리
- DECIMAL(p, s) : 고정 소수점. 금융, 통화 계산 등에 적합
create table products (
price float(7,2),
price2 double(10,4),
price3 decimal(15,2)
);
insert into products
values (12345.67, 123456.7890, 9999999999999.99);
DECIMAL은 실제 계산 결과가 부동소수점 오차 없이 정확히 떨어지기 때문에, 금융 분야에서 필수적이다.
4. 논리형 (BOOLEAN)
MySQL에서는 BOOLEAN을 선언해도 내부적으로는 TINYINT(1)로 처리된다.
즉, TRUE는 1, FALSE는 0으로 저장된다.
create table employees (
is_senior BOOLEAN
);
insert into employees
values (true);
select * from employees; -- → 1로 보임
✅ SHOW CREATE TABLE employees 명령어로 보면 실제 타입이 tinyint(1)으로 바뀌어 있음도 확인 가능!
5. 날짜형 (DATE, TIME, DATETIME)
시간 정보를 다룰 때는 세 가지로 나뉜다:
- DATE: YYYY-MM-DD
- TIME: HH:mm:ss
- DATETIME: YYYY-MM-DD HH:mm:ss
create table events (
event_name varchar(100),
event_date date
);
insert into events
values ('Birthday', '2024-03-14');
📌 DATETIME은 8바이트, TIME/DATE는 3바이트이므로 공간 효율 고려 필요
6. 열거형 ENUM
고정된 값 중에서 하나만 선택해야 하는 경우 매우 유용하다.
create table rainbow (
color enum('red', 'orange', 'yellow', 'purple'),
description varchar(100)
);
insert into rainbow
values
('red', '빨강'),
('orange', '주황'),
('yellow', '노랑'),
('purple', '보라');
❌ 아래는 오류 발생:
insert into rainbow values ('green', '초록');
-- Error Code: 1265. Data truncated for column 'color'
✅ 팁: ENUM 정의된 값 확인하려면 다음 쿼리 사용
SELECT column_type
FROM information_schema.columns
WHERE table_name = 'rainbow' AND column_name = 'color';
단 Spring 을 사용해서 개발 할 시에는 java에서 인식이 잘 안되기 때문에 일반 변수조건 + chk조건으로 개발 진행 권장
'웹개발 > SQL(mySQL)' 카테고리의 다른 글
| 무결성(Integrity) (1) | 2025.06.14 |
|---|---|
| MySQL 명명규칙 (1) | 2025.06.13 |
| MySQL DDL 문법 (Data Definition Language) (1) | 2025.06.11 |
| RDBMS와 SQL 기초 개념 (0) | 2025.06.10 |
| Workbench사용법 및 환경변수 정리 (4) | 2025.06.09 |