MySQL DECIMAL을 사용하는 방법?


177

MySQL의 DECIMAL을 파악할 수 없습니다. 00.0001에서 99.9999 사이의 숫자를 포함 할 수있는 행이 필요합니다. 어떻게 작동하도록 구성합니까?



4
정답을 받아 들여야합니다. 현재 승인 된 답변이 잘못되었습니다.
Olhovsky

2
여기서 끝났고 DECIMAL UNSIGNED가 가능하지 않다고 주장하는 대답을 읽으십시오. 이에 대한 올바른 사양은 아래의 신선한 답변을 참조하십시오.
Markus AO

답변:


439

DOUBLE 열은 DECIMAL 열과 같지 않으므로 재무 데이터에 DOUBLE 열을 사용하면 문제가 발생 합니다.

DOUBLE은 실제로 FLOAT 의 배정도 (32 비트 대신 64 비트) 버전입니다 . 부동 소수점 숫자는 실수의 대략적인 표현이며 정확하지 않습니다. 실제로 0.01과 같은 간단한 숫자는 FLOAT 또는 DOUBLE 유형에서 정확하게 표현되지 않습니다.

DECIMAL 열은 정확한 표현이지만 훨씬 적은 수의 가능한 범위를 위해 더 많은 공간을 차지합니다. 0.0001에서 99.9999 사이의 값을 보유 할 수있는 열을 만들려면 다음 명령문이 필요합니다.

CREATE TABLE your_table
(
    your_column DECIMAL(6,4) NOT NULL
);

열 정의는 DECIMAL (M, D) 형식을 따릅니다. 여기서 M 은 최대 자릿수 ( 정밀도 )이고 D 는 소수점 오른쪽에있는 자릿수 ( 스케일 )입니다.

이는 이전 명령이 -99.9999에서 99.9999 사이의 값을 허용하는 열을 작성 함을 의미합니다. 0.0000에서 99.9999 범위의 UNSIGNED DECIMAL 열을 만들 수도 있습니다.

MySQL DECIMAL에 대한 자세한 내용은 공식 문서 는 항상 훌륭한 자료입니다.

이 모든 정보는 MySQL 5.0.3 이상의 버전에 해당된다는 것을 명심하십시오. 이전 버전을 사용하는 경우 실제로 업그레이드해야합니다.


17
당신의 대답을 투표했습니다. 귀하의 답변은 정확하고 다른 답변은 정확하지 않습니다 ( "double = decimal"이라고 주장하기 때문에). DECIMAL은 정확한 값을 가진 고정 소수점 유형이며 동의어는 NUMERIC, DEC 및 FIXED입니다. DOUBLE은 근사 숫자 데이터 값을 나타내는 부동 소수점 유형이므로 DOUBLE이 아닙니다. DECIMAL (<1-65>, <0-30>)을 사용하는 경우 첫 번째 매개 변수는 자릿수이고, 두 번째 매개 변수는 소수점 오른쪽의 자릿수입니다.
Norbert

2
네, 맞아요. 5.0.3에 대한 작업, 이후 참고 받아 dev.mysql.com/doc/refman/5.1/en/precision-math-examples.html
ajreal

1
포스터는 0.0001에서 99.9999 사이의 값을 보유한 10 진수 필드를 요청했습니다. 생성 된 필드가 실제로 -99.9999에서 99.9999 사이의 값을 지원한다는 것을 명확히하기 위해 추가 정보를 추가했습니다. 피드백 감사드립니다! 또한 MySQL 버전 고지 사항이 추가되었습니다.
Alex Recarey

1
""서명되지 않은 "DECIMAL 열을 작성할 수있는 방법이 없지만 코드 예제는"DECIMAL (6,4) UNSIGNED NOT NULL "을 나타냅니다. 왜 이런거야?
liang

3
@ AlexRecarey 나는 DECIMAL UNSIGNED를 잘 만들 수있는 것 같습니다. MySQL 5.x 매뉴얼은 다음에 동의합니다 DECIMAL[(M[,D])] [UNSIGNED] [ZEROFILL]. 음수 값에 대해서는 범위를 벗어난 오류를 반환합니다. 마찬가지로 서명되지 않은 FLOAT 및 DOUBLE을 만들 수 있습니다. 매뉴얼 : dev.mysql.com/doc/refman/5.0/en/numeric-type-overview.html
Markus AO

67

위의 답변은 정확 해 보이지만 작동 방법에 대한 간단한 설명 만 제공하면됩니다.

열이로 설정되어 있다고 가정하십시오 DECIMAL(13,4). 즉, 열의 총 크기는 13 자리이며,이 중 4 개가 정밀 표현에 사용됩니다.

따라서 요약하면 해당 열의 최대 값은 다음과 같습니다. 999999999.9999


1
여기에 최고의 답변
Julian Silvestri

15

의견에는 올바른 해결책이 있지만 단일 답변으로 요약하면 다음과 같습니다.

DECIMAL (6,4)을 사용해야합니다.

그런 다음 소수점 6 자리 (소수점 앞뒤 2 자리)를 총 6 자리로 지정할 수 있습니다. 에 따라 적어도 .


6

십진 데이터 유형에 대한 MySQL 5.x 사양 은 다음과 같습니다 DECIMAL[(M[,D])] [UNSIGNED] [ZEROFILL]. 위의 대답은 부호없는 소수를 사용할 수 없다는 잘못된 말입니다.

부호없는 10 진수 만 허용하고 총 길이는 6 자리이며 그 중 4는 소수 인 필드를 정의하려면 다음을 사용 DECIMAL (6,4) UNSIGNED합니다..

마찬가지로 부호없는 (즉, 음수가 아닌) FLOAT 및 DOUBLE 데이터 유형을 작성할 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.