development

MySQL에 돈 가치를 저장하는 최고의 데이터 유형

big-blog 2020. 4. 1. 08:03
반응형

MySQL에 돈 가치를 저장하는 최고의 데이터 유형


MySQL 데이터베이스에 많은 레코드를 저장하고 싶습니다. 그들 모두는 돈 가치를 포함합니다. 그러나 각 숫자에 몇 개의 숫자가 삽입 될지 모르겠습니다.
이 목적으로 어떤 데이터 유형을 사용해야합니까?
VARCHAR 또는 INT (또는 기타 숫자 데이터 유형)?


돈은 정확한 표현이 필요하기 때문에 대략적인 데이터 유형을 사용하지 마십시오 float. 같은 고정 소수점 숫자 데이터 형식을 사용할 수 있습니다

decimal(15,2)
  • 15 정밀도 (소수 자릿수를 포함한 전체 값 길이)
  • 2 소수점 이하 자릿수입니다.

MySQL 숫자 유형을 참조하십시오 .

이러한 유형은 통화 데이터 와 같이 정확한 정밀도를 유지하는 것이 중요 할 때 사용됩니다 .


당신은 사용할 수 있습니다 DECIMAL또는 NUMERIC둘 다 동일합니다

DECIMAL 및 NUMERIC 유형은 정확한 숫자 데이터 값을 저장합니다. 이러한 유형은 통화 데이터와 같이 정확한 정밀도를 유지하는 것이 중요 할 때 사용됩니다. MySQL에서 NUMERIC은 DECIMAL로 구현되므로 DECIMAL에 대한 다음 설명은 NUMERIC에 동일하게 적용됩니다. : MySQL

DECIMAL(10,2)

설정 예

잘 읽음


나는을 사용 하고 100BIGINT곱하여 값을 저장하여 정수가되도록 선호합니다 .

예를 들어, 통화 값을 나타내 93.49려면 값을로 저장 9349하고 값 을 100으로 나누고 표시 할 수 있습니다 . 이것은 적은 저장 공간을 차지할 것입니다.

주의 :
대부분 currency * currency곱셈을 수행하지 않습니다. 곱셈을 수행 하는 경우 결과를 100으로 나누고 저장하여 적절한 정밀도로 돌아갑니다.


그것은 당신의 필요에 달려 있습니다.

DECIMAL(10,2)일반적으로 사용하는 것으로 충분하지만 조금 더 정확한 값이 필요한 경우 설정할 수 있습니다 DECIMAL(10,4).

큰 값을 교체하면 작업하는 경우 1019.


애플리케이션이 최대 1 조 달러의 금액을 처리해야하는 경우 다음과 같이 작동합니다. 13,2 GAAP (일반적으로 허용되는 회계 원칙)를 준수해야하는 경우 다음을 사용하십시오. 13,4

일반적으로 산출물을 13,2로 반올림하기 전에 13,4의 금액을 합산해야합니다.


실제로 이것은 프로그래머의 선호에 달려 있습니다. 나는 개인적으로 사용 numeric(15,4)을 준수하기 위해 일반적으로 인정되는 회계 원칙 ( GAAP ) .


사용해보십시오

Decimal(19,4)

이것은 일반적으로 다른 모든 DB에서도 작동합니다.


당시이 질문은 아무도 Bitcoin 가격에 대해 생각하지 않았습니다. BTC의 경우을 사용하기에 충분하지 않을 수 있습니다 DECIMAL(15,2). 비트 코인이 $ 100,000 이상으로 상승 할 경우, DECIMAL(18,9)앱에서 cryptocurrencies를 지원 해야 합니다.

DECIMAL(18,9)MySQL에서 12 바이트의 공간을 차지합니다 (9 자리 당 4 바이트 ).


우리는 사용 double합니다.

* 가슴살 *

왜?

소수점 이하 자릿수에 대한 제한 없이 15 자리 숫자 나타낼 수 있기 때문 입니다 . 8 바이트를위한 모든 것!

따라서 다음을 나타낼 수 있습니다.

  • 0.123456789012345
  • 123456789012345.0

... 그리고 그 사이의 모든 것.

이것은 우리가 세계 통화를 다루고 있기 때문에 유용 하며, double발생할 수있는 소수점 이하 자릿수를 저장할 수 있습니다.

단일 double필드는 일본 엔으로 999,999,999,999,999s, 미국 달러로 9,999,999,999,999.99s, 비트 코인으로 9,999,999.99999999s를 나타낼 수 있습니다.

와 같은 작업을 시도 decimal하면 decimal(30, 15)14 바이트의 비용 이 필요 합니다.

경고

물론 사용 double에주의가없는 것은 아닙니다.

그러나 일부는 지적하는 것처럼 정확도가 손실 되지 않습니다 . double자체적으로 기본 10 시스템 에 대해 정확 하지는 않지만 데이터베이스에서 가져온 을 소수점 이하 자릿수 반올림하여 정확하게 만들 수 있습니다. 필요한 경우입니다. (예를 들어 출력 될 경우 10 진법 표현이 필요합니다.)

주의 사항은 산술을 수행 할 때마다 결과를 정규 소수점 이하 자릿수로 반올림하여 정규화해야합니다.

  1. 그것에 비교를 수행.
  2. 다시 데이터베이스에 씁니다.

또 다른 종류의 경고는 decimal(m, d)데이터베이스가 프로그램이 m숫자 보다 많은 숫자를 삽입하는 것을 방지하는 것과 달리 double. 프로그램은 사용자가 입력 한 20 자리의 값을 삽입 할 수 있으며 정확하지 않은 금액으로 자동 기록됩니다.


저장 BIGINT공간을 적게 사용하는 이유 때문에 100 이상 으로 돈을 저장하면 모든 "정상적인"상황에서 의미가 없습니다.

  • GAAP와의 관계를 유지하려면 통화를 DECIMAL(13,4)
  • MySQL 매뉴얼은 저장하기 위해 9 자리 당 4 바이트가 필요하다는 것을 읽습니다 DECIMAL.
  • DECIMAL(13,4) 9 자리 숫자 + 4 자리 숫자 (소수점) => 4 + 2 바이트 = 6 바이트
  • 저장하는 데 필요한 8 바이트와 비교하십시오 BIGINT.

10000을 곱하고 Visual Basic 및 Office의 "Currency"와 같은 BIGINT로 저장합니다. 참조 https://msdn.microsoft.com/en-us/library/office/gg264338.aspx를

참고 URL : https://stackoverflow.com/questions/13030368/best-data-type-to-store-money-values-in-mysql

반응형