SQL 숫자 타입 정수, 소수, 비트 타입 비교와 선택법
SQL에서는 다양한 숫자 데이터를 정확하고 효율적으로 저장하기 위해 숫자 타입(Numeric Types)을 제공합니다. 이 글에서는 정수, 고정 소수점, 부동 소수점, 비트값 타입의 특징과 사용법을 예제와 함께 자세히 설명합니다.
1. 정수 타입 (Integer Types)
정수 타입은 음수와 양수 모두 포함된 숫자 또는 양수만 저장하는 숫자를 저장할 때 사용합니다.
| 타입 | 저장 공간 | 범위 (SIGNED) | 범위 (UNSIGNED) |
|---|---|---|---|
| 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 | 4바이트 | -2,147,483,648 ~ 2,147,483,647 | 0 ~ 4,294,967,295 |
| BIGINT | 8바이트 | ±9.2경 이상 | 0 ~ 18,446,744,073,709,551,615 |
기본 특징
SIGNED: 음수와 양수 모두 저장 (기본값)UNSIGNED: 양수만 저장 가능, 표현 범위가 2배로 넓어짐
예제: 정수 필드 추가
ALTER TABLE Reservation ADD Price INT;
2. 고정 소수점 타입 (Fixed-Point Types)
고정 소수점은 금융/통계처럼 정밀도가 중요한 경우에 사용합니다. MySQL에서는 DECIMAL 또는 NUMERIC 타입으로 구현됩니다.
문법
DECIMAL(M, D)
- M: 전체 자릿수 (소수점 포함), 최대 65
- D: 소수점 이하 자릿수, D ≤ M
특징
D=0이면 정수처럼 사용 가능- 오차 없이 정밀한 계산 가능
예제: 필드 타입 변경
ALTER TABLE Reservation MODIFY COLUMN RoomNum DECIMAL(7, 2);
RoomNum: 최대 99999.99까지 저장 가능
3. 부동 소수점 타입 (Floating-Point Types)
부동 소수점은 정밀도가 다소 떨어져도 되며 빠른 계산이 필요한 경우에 적합합니다. 예: 과학/공학 계산
| 타입 | 저장 공간 | 표현 범위 (근사값) |
|---|---|---|
| FLOAT | 4바이트 | ±3.4E+38 |
| DOUBLE | 8바이트 | ±1.8E+308 |
문법
FLOAT(M, D)
DOUBLE(M, D)
- M: 전체 자릿수
- D: 소수점 이하 자릿수
특징
IEEE 754표준 사용- DOUBLE이 FLOAT보다 더 높은 정밀도 제공
예제: 필드 타입 변경
ALTER TABLE Reservation MODIFY COLUMN RoomNum FLOAT(7, 2);
4. 비트값 타입 (Bit-Value Type)
BIT 타입은 0과 1로 구성된 데이터(이진 데이터)를 저장하는 데 사용합니다.
문법
BIT(M)
- M: 비트 수 (1~64)
특징
- 이진수 입력은
b'값'형식 - 짧은 비트값 입력 시 자동으로 0이 채워짐
예제: 비트 필드 추가 및 값 삽입
ALTER TABLE Reservation ADD Code BIT(7);
INSERT INTO Reservation (Code) VALUES (b'100');
b'100'→b'0000100'으로 저장됨
5. 숫자 타입 선택 요령
| 목적 | 권장 타입 | 이유 |
|---|---|---|
| 정수만 저장 | TINYINT ~ BIGINT |
크기와 범위에 따라 선택 |
| 항상 양수 | UNSIGNED 옵션 사용 |
더 넓은 범위 확보 가능 |
| 정밀 계산 | DECIMAL(M, D) |
금융/통계용, 오차 없음 |
| 빠른 계산 | FLOAT, DOUBLE |
부동소수점, 속도 우선 |
| 이진 데이터 | BIT(M) |
상태, 권한 플래그 저장 등에 유용 |
요약 정리표
| 타입 종류 | 용도 | 특징 | 예시 |
|---|---|---|---|
| 정수 (TINYINT~BIGINT) | 정수값 저장 | 저장 공간 작음, UNSIGNED 가능 |
Price INT UNSIGNED |
고정 소수점 (DECIMAL) |
정확한 실수 계산 | 오차 없음, 자릿수 지정 가능 | Salary DECIMAL(10,2) |
부동 소수점 (FLOAT, DOUBLE) |
대략적 실수 계산 | 속도 빠름, 정밀도 낮음 | Weight FLOAT(5,2) |
비트값 (BIT) |
이진 데이터 | 0과 1로만 구성됨 | Code BIT(5) |
질문 정리
- FLOAT과 DECIMAL의 차이는 무엇인가요?
- FLOAT: 빠르지만 오차 있음
- DECIMAL: 느리지만 정확함 (금융에 적합)
- 정수 타입은 언제 UNSIGNED를 쓰나요?
- 음수가 필요 없는 경우에 사용하면 표현 범위가 2배 증가합니다.
- DECIMAL에서 M과 D는 꼭 지정해야 하나요?
- 지정하지 않으면 기본값이 적용되며, 계산이나 정렬에 예상치 못한 문제가 생길 수 있으니 명시하는 것이 좋습니다.
- BIT 타입은 어떤 경우에 쓰나요?
- 0과 1만 필요한 경우 (예: on/off, 권한 플래그, 이진 상태 표시 등)
- DOUBLE은 어디에 적합한가요?
- 높은 정밀도를 필요로 하지 않으면서 넓은 범위의 실수를 다루는 과학적 계산 등에 적합합니다.
댓글남기기