12.20.2 DECIMAL 데이터 유형의 특성
이 섹션에서는 MySQL 5.6에서 DECIMAL
데이터 유형 (및 동의어)의 특성에 대해 특히 다음 항목에주의를 기울이면서 설명합니다.
최대 자리수
저장 포맷
스토리지 요구 사항
DECIMAL
컬럼의 상한에 비표준 MySQL 확장.
이 섹션 전체에서 이전 버전 (5.0.3 이전)의 MySQL을 위해 작성된 응용 프로그램과의 비 호환성 가능성이 기재되어 있습니다.
DECIMAL
컬럼 선언 구문은 DECIMAL(
입니다. MySQL 5.6에서 인수 값의 범위는 다음과 같습니다. M
, D
)
M
은 최대 자릿수 (정밀도)입니다. 그 범위는 1에서 65까지입니다. (이전 버전의 MySQL에서는 1에서 254까지의 범위가 허용되었습니다.)D
는 소수점 이하 자릿수 (스케일)입니다. 그 범위는 0에서 30까지이고M
보다 클 수 없습니다.
M
65의 최대 값 인 경우는 DECIMAL
값에 대한 계산이 65 자리까지 정확하다는 것을 나타냅니다. 이 65 자리 정도의 제한은 엄격 값 숫자 리터럴에도 적용되기 때문에 이러한 리터럴의 최대 범위는 이전과는 다릅니다. (이전 버전의 MySQL에서는 10 진수의 최대 자리수는 254이었습니다. 그러나 계산은 부동 소수점을 사용하여 실행 된 위해 엄격한 값이 아닌 근사치였습니다.)
MySQL 5.6에서 DECIMAL
컬럼 값은 9 자리의 10 진수가 4 바이트로 압축 된 바이너리 형식을 사용하여 저장됩니다. 각 값의 정수 부분과 소수 부분에 대한 스토리지 요구 사항은 개별적으로 결정됩니다. 9 자리의 반복마다 4 바이트가 필요하며, 나머지 자리수가있을 경우 4 바이트의 일부가 필요합니다. 나머지 자릿수에 필요한 스토리지는 다음 표에서 지정됩니다.
나머지 자릿수 | 바이트 수 |
---|---|
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 바이트가 필요합니다.
일부 이전 버전의 MySQL과는 달리, MySQL 5.6에서 DECIMAL
컬럼은 선행 +
문자 나 -
문자 또는 선행 0
의 숫자가 저장되지 않습니다. DECIMAL(5,1)
컬럼에 +0003.1
를 삽입하면 그것은 3.1
으로 저장됩니다. 음수의 경우 리터럴 -
문자는 저장되지 않습니다. 이전 동작에 의존하는 응용 프로그램이 변경 사항이 반영되도록 변경해야합니다.
MySQL 5.6에서 DECIMAL
컬럼은 컬럼 정의에 의해 암묵적으로 지정된 범위를 넘는 값이 허용되지 않습니다. 예를 들어, DECIMAL(3,0)
컬럼은 -999
에서 999
까지의 범위를 지원합니다. DECIMAL(
컬럼은 소수점 왼쪽에 허용되는 것은 많아도 M
, D
)M
- D
자리입니다. 이것은 +
기호 대신 추가 자릿수의 저장이 허용 된 이전 버전의 MySQL에 의존하는 응용 프로그램과 호환이 없습니다.
SQL 표준은 NUMERIC(
의 정밀도가 정확히 M
, D
)M
자리 여야합니다. DECIMAL(
의 경우,이 표준은 적어도 M
, D
)M
자리수의 정밀도가 필요하지만, 그것 이상의 정밀도가 허용됩니다. MySQL은 DECIMAL(
과 M
, D
)NUMERIC(
은 같고, 모두 정확하게 M
, D
)M
자리수의 정밀도를 가지고 있습니다.
DECIMAL
값의 내부 형식의 완전한 설명은 MySQL 소스 배포판의 파일 strings/decimal.c
를 참조하십시오. 이 형식은 decimal2bin()
함수 (예를 사용하여) 설명되어 있습니다.
DECIMAL
데이터 유형의 이전 처리에 의존하는 응용 프로그램의 이식의 자세한 내용은 "MySQL 5.0 참조 설명서"를 참조하십시오.