mysql manual 정리
Table of Contents
1 Functions And Operators
1.1 Precision Math
1.1.1 DECIMAL Data Type Characteristics
DECIMAL 데이터 타입 아래 내용들을 다룬다.
- 최대 자릿수 (Maximum number of digits)
- 저장 형식 (Storage format)
- 저장소 요구사항 (Storage requirements)
- 십진수 열의 상위 범위에 대한 비표준 MYSQL 확장자 (The nonstandard MySQL extension to the upper range of DECIMAL columns)
DECIMAL 선언 구문은 DECIMAL(M,D)이다. 각 인수의 범위는 다음과 같다.
- M은 최대 자릿수(정밀도)이며 범위는 1~65. (default 10)
- D는 소수점 오른쪽에 있는 자리 수(눈금). 범위는 0~30이며 M보다 크면 안된다. (defualt 0)
M의 최대값이 65라는 것은 소수점 값에 대한 계산이 최대 65자리까지 정확하다는 것을 말한다. 이 65자리 정밀도 제한은 정확한 값의 숫자 리터럴에도 적용되므로, 이러한 리터럴의 최대 범위는 이전과 다르다. DECIMAL 리터럴의 텍스트 길이에도 제한이 있다. (see Section 12.24.3, "Expression Handling")
DECIMAL 값은 9자리(nin decimal digits)를 2진 4바이트(binary format 4 bytes)로 묶어 저장한다. 각 값의 정수 부분과 소수 부분은 요구 사항은 별도로 결정된다. 9자리 숫자의 각 배수는 4바이트가 필요하고, 남은 자릿수는 4바이트의 일부분이 필요하다. 남은 자릿수에 필요한 저장용량은 아래 있다.
Leftover Digits | Number of Bytes |
---|---|
0 | 0 |
1-2 | 1 |
3-4 | 2 |
5-6 | 3 |
7-9 | 4 |
예를들어, DECIMAL(18,9)는 양쪽에 9자리가 있으므로 정수/소수 부분에서 각각 4바이트가 필요하다. DECIMAL(20,6)는 14개 정수와 6개 소수이므로 정수에 9자리 4바이트 나머지 5자리 3바이트가 필요하다. 6개의 소수자리에는 3바이트가 필요하다.
DECIMAL은 문자열 +,- 를 따로 저장하지 않는다.