Numeric Types

숫자 타입은 먼저 소수 여부, 그다음 정확도 요구로 고릅니다.

같은 숫자라도 주문 수량, 센서 측정값, 결제 금액은 저장 목적이 다릅니다. 목적이 다르면 타입도 달라져야 합니다.

금액과 정산에는 FLOAT를 쓰지 않습니다.

작은 근사 오차가 누적될 수 있으므로 DECIMAL, NUMERIC, NUMBER(p,s) 계열을 사용합니다.

1 소수가 없는가?

개수, ID, 순번처럼 끊어진 값이면 정수형을 선택합니다.

2 소수지만 근사값이어도 되는가?

온도, 평균, 과학 측정값처럼 오차를 허용하면 부동소수형이 맞습니다.

3 소수가 정확해야 하는가?

가격, 세율, 정산 금액처럼 결과가 정확해야 하면 고정 소수점을 씁니다.

정수형

소수 없는 값

대표 데이터

수량, 카운트, 식별자

Oracle

NUMBER, NUMBER(10)

MySQL

INT, BIGINT

PostgreSQL

INTEGER, BIGINT

부동소수형

근사 계산

대표 데이터

측정값, 평균, 통계값

Oracle

BINARY_FLOAT, BINARY_DOUBLE

MySQL

FLOAT, DOUBLE

PostgreSQL

REAL, DOUBLE PRECISION

고정 소수점

정확한 소수

대표 데이터

금액, 세금, 정산

Oracle

NUMBER(p,s)

MySQL

DECIMAL(p,s)

PostgreSQL

NUMERIC(p,s)

p와 s 읽기: p는 전체 자릿수, s는 소수점 이하 자릿수입니다. 예를 들어 NUMBER(10,2)는 전체 10자리 중 소수 2자리를 의미합니다.