MySQL Money Data Type
MySQL에 돈과 관련된 데이터를 저장할때 어떤 자료형이 적절할까?
돈과 관련된 데이터를 저장할때는 정확한 값을 저장해야 한다는 요구사항이 있다.
소수점과 관련된 데이터는 그 중요성이 더 부각되는데, 부동소수점의 원리상 손실되는 데이터가 있기 때문이다.
따라서 소수점 데이터를 다룰떄는 주의해서 데이터 타입을 선택해야 한다.
INT
4Byte
-2147483648 ~ 2147483647까지의 숫자를 나타낼 때 사용한다.
BIGINT
8Byte
큰 숫자를 나타낼 떄 사용한다. (900경)
소수점을 나타낼때 사용할 수 있는데, 소수점 아래 2자리를 가지고 있다면 100을 곱하여 저장하고 읽어올때 100을 나눠서 소수점 아래 숫자를 나타낸다.
정확한 소수점 자리수를 저장할 수 있지만, 추가적인 연산 처리를 해줘야 한다는 단점이 있다.
Float, Double
Float : 4Byte, Double : 8Byte
부동소수점 방식으로 소수점을 나타낼 때 사용한다.
부동소수점 방식이므로 근사치를 저장한다.
따라서 돈과 관련된 데이터를 저장하기에는 적합하지 않다.
DECIMAL
DECIMAL은 고정 소수점 방식을 사용한다.
DECIMAL(P, D) 형식으로 사용하게 된다.
1
2
3
P : 정수, 소수부를 포함한 총 자릿수 (1 ~ 65)
D : 소수점 자릿수 (0 ~ 30)
DECIMAL은 가변 형태의 데이터이다.
정확한 데이터 크기를 알고 싶을때는 계산이 필요하다.
이떄 정수부, 소수부로 나눠서 계산을 하게 된다.
예를 들어 DECIMAL(18, 9)는 각각 정수부 소수부가 각각 9자리씩 사용하므로 4byte + 4byte = 8byte를 사용한다.
DECIMAL(16, 2)의 경우 정수부 14자리, 소수부 2자리를 사용한다.
정수부: 9자리 (4byte) + 5자리(3byte) -> 7byte
소수부: 2자리 (1byte)
총 8byte를 사용한다.
각 자릿수가 몇 바이트를 사용하는지 표
Leftover Digits | Number of Bytes |
---|---|
0 | 0 |
1–2 | 1 |
3–4 | 2 |
5–6 | 3 |
7–9 | 4 |