2009-11-25 5 views
53

MySQL에서는 제품 가격 (또는 일반적으로 통화)을 저장할 때 선호되는 열 유형은 무엇입니까? Google는 나를 배웠다. 십진법의 FLOAT가 자주 사용되었지만 어느 것이 더 낫 겠는가.MySQL : (제품) 가격에 적합한 열 유형?

나는 가격을 0.01에서 25.00까지 저장하고 있습니다. 물론 더 높은 값도 가능할 수 있습니다. (참고 : 복사 - 파스타 코드를 요구하지 않고, 좀 더 완전한 답을 얻을 수있는 정보를 제공 할뿐입니다.)

감사

답변

59

진수 내가 진수/숫자 사이에

기본적인 차이를 사용하고 플로트 것입니다 : 플로트 의미 대략 번호 데이터 형식입니다 모든 값 데이터 범위 을 정확히 나타낼 수 있습니다. 10 진수/숫자는 고정 정밀도 데이터 유형입니다. 즉, 데이터 유형 reane의 값은 정확히 이고 정밀도는 입니다.

십진수 또는 숫자에서 float로 변환하면 정밀도가 약간 손실 될 수 있습니다. 십진수 또는 숫자 데이터 형식의 경우 SQL Server는 각 의 특정 조합을 정밀도와 의 배율을 다른 데이터 형식으로 간주합니다. DECIMAL (4,2) 및 DECIMAL (6,4)은 서로 다른 데이터 형식 인 입니다. 즉, float의 경우는 아니지만 11.22와 11.2222는 다른 유형입니다. FLOAT (6) 11.22 및 11.2222의 경우 동일한 데이터 유형이 입니다.

+0

감사합니다 jdt199와 Razzie는 두 가지 대답을 모두 수락하지만 가장 완벽한 것으로 선택했습니다. – SolidSmile

+1

@Sheff DECIMAL (2,2)은 DECIMAL (4,2) 여야합니다. DECIMAL (2,4)은 DECIMAL (6,4)이어야합니다. https://dev.mysql.com/doc/refman/5.7/en/precision-math-decimal-characteristics.html – cgaldiolo

13

부동 소수점 형식이므로 반올림 오류가 발생할 수 있으므로 float을 사용하지 않습니다.

사용 진수 :

". 진수 및 숫자 유형은 통화 데이터 예를 들어, 정확한 정밀도를 유지하기 위해 중요하다있는 값을 저장 을 사용"

볼 : http://dev.mysql.com/doc/mysql/en/numeric-types.html

+0

참조 : https://dev.mysql.com/doc/refman/5.7/ en/fixed-point-types.html – Amr

23

필드 유형 "진수"좋다.

가격이 높으면 product_price decimal(6,2) NOT NULL,을 사용할 수 있습니다. 즉, 2 자리 앞에 소수점이있는 6 자리까지 가격을 저장할 수 있습니다. 모든 가격은 좋은 것입니다 0.01 다음 product_price decimal(4,2) NOT NULL, 25.00 사이에있는 경우 필드 product_price decimal(6,2) NOT NULL,에 대한

최대 값은 9999.99

에 가격을 저장합니다,하지만 당신은 더 높은 가격을한다면 당신은 decimal(4,2)의 모든 값을 설정할 수 있습니다.

6

다른 소프트웨어의 부동 소수점 문제를 해결하는 INT (가격에 100을 곱한 값)를 선호합니다.

+2

나는 그런 시스템을 물려 받았다. 가격을 기준으로 DB에서 검색을하기 전에이 사람이 모든 가격을 곱한 것을 보는 것은 재미 있었다. 나중에 십진수로 이동하기 전에 이것으로 인해 버그를 잡는 데 충분한 고통을 느낀다 – Tebe

+0

@ 십진법을 사용하여 부동 소수점 문제를 어떻게 해결할 수 있습니까? – Peter

+0

을 저장하기 전에 점을 찍은 다음 매번 3 ~ 3 번째 숫자를 반올림하고 십진수 (N, 3)를 사용하여 – Tebe