MySQL 데이터베이스에 많은 레코드를 저장하고 싶습니다. 그들 모두는 돈 가치를 포함합니다. 그러나 각 숫자에 몇 개의 숫자가 삽입되는지 모르겠습니다.
이 목적으로 어떤 데이터 유형을 사용해야합니까?
VARCHAR 또는 INT (또는 기타 숫자 데이터 유형)?
MySQL 데이터베이스에 많은 레코드를 저장하고 싶습니다. 그들 모두는 돈 가치를 포함합니다. 그러나 각 숫자에 몇 개의 숫자가 삽입되는지 모르겠습니다.
이 목적으로 어떤 데이터 유형을 사용해야합니까?
VARCHAR 또는 INT (또는 기타 숫자 데이터 유형)?
답변:
돈은 정확한 표현이 필요하기 때문에 대략적인 데이터 유형을 사용하지 마십시오 float
. 이와 같은 고정 소수점 숫자 데이터 유형을 사용할 수 있습니다
decimal(15,2)
15
정밀도 (소수 자릿수를 포함한 전체 값 길이)2
소수점 이하 자릿수입니다.MySQL 숫자 유형을 참조하십시오 .
이러한 유형은 통화 데이터 와 같이 정확한 정밀도를 유지하는 것이 중요 할 때 사용됩니다 .
decimal
와 numeric
동일합니다.
numeric(19,4)
새로운 요청을 쉽게하고 채택 할 수있는 더 나은 손길을주는 재무 기록을 위해 사용 합니다.
사용 DECIMAL
하거나 NUMERIC
둘 다 동일
DECIMAL 및 NUMERIC 유형은 정확한 숫자 데이터 값을 저장합니다. 이러한 유형은 통화 데이터와 같이 정확한 정밀도를 유지하는 것이 중요 할 때 사용됩니다. MySQL에서 NUMERIC은 DECIMAL로 구현되므로 DECIMAL에 대한 다음 설명은 NUMERIC에 동일하게 적용됩니다. : MySQL
즉 DECIMAL(10,2)
나는을 사용 하고 100BIGINT
을 곱하여 값을 저장하여 정수가되도록 선호합니다 .
예를 들어, 통화 값을 나타내 93.49
려면 값을로 저장 9349
하고 값 을 100으로 나누고 표시 할 수 있습니다 . 이것은 적은 저장 공간을 차지할 것입니다.
주의 :
대부분currency * currency
곱셈을 수행하지 않습니다. 곱셈을 수행 하는 경우 결과를 100으로 나누고 저장하여 적절한 정밀도로 돌아갑니다.
$0.005
또는 $0.12345
)로 돈을 저장하는 경우 스케일 제거 방법을 사용하는 것에주의 하십시오. 값의 정밀도를 알고 있다면 가장 좋은 방법은를 사용하는 것 DECIMAL
입니다. 그러나 (예에서와 같이) 정밀도를 모른다면 ... FLOAT
적절할 것입니까?
필요에 따라 다릅니다.
DECIMAL(10,2)
일반적으로 사용하는 것으로 충분하지만 조금 더 정확한 값이 필요한 경우 설정할 수 있습니다 DECIMAL(10,4)
.
큰 값을 교체하면 작업하는 경우 10
에 19
.
애플리케이션이 최대 1 조 달러의 금액을 처리해야하는 경우 다음과 같이 작동합니다. 13,2 GAAP (일반적으로 허용되는 회계 원칙)를 준수해야하는 경우 다음을 사용하십시오. 13,4
일반적으로 산출물을 13,2로 반올림하기 전에 13,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 진법 표현이 필요한 경우)
주의 사항은 산술을 수행 할 때마다 결과를 정규 소수점 이하 자릿수로 반올림하여 정규화해야합니다.
또 다른 종류의 경고는 decimal(m, d)
데이터베이스가 프로그램이 m
숫자 보다 많은 숫자를 삽입하는 것을 방지하는 것과 달리 double
. 프로그램은 사용자가 입력 한 20 자리의 값을 삽입 할 수 있으며 정확하지 않은 금액으로 자동 기록됩니다.
1.410000000000
(12 자리 유효 소수점 이하 자릿수) 인 것으로 가정 하지만 1,000,000,000,000 (소수점 왼쪽에있는 유효 자릿수 13 자리)을 곱하면 최소 25 자리의 중요도. 이것은 두 배로 사용할 수있는 15를 능가하므로 디자인 측면에서는 그것이 매우 깨질 것이라고 생각합니다.
당시이 질문은 아무도 Bitcoin 가격에 대해 생각하지 않았습니다. BTC의 경우을 사용하기에 충분하지 않을 수 있습니다 DECIMAL(15,2)
. 비트 코인이 $ 100,000 이상으로 상승 할 경우, DECIMAL(18,9)
앱에서 cryptocurrencies를 지원 해야 합니다.
DECIMAL(18,9)
MySQL에서 12 바이트의 공간을 차지합니다 (9 자리 당 4 바이트 ).
저장 BIGINT
공간을 적게 사용하는 이유로 100 이상 으로 돈을 저장하면 모든 "정상적인"상황에서 의미가 없습니다.
DECIMAL(13,4)
DECIMAL
.
DECIMAL(13,4)
9 자리 숫자 + 4 자리 숫자 (소수점) => 4 + 2 바이트 = 6 바이트BIGINT
.GAAP 준수가 필요하거나 소수점 이하 4 자리가 필요한 경우 :
DECIMAL (13, 4) 다음과 같은 최대 값을 지원합니다.
$ 999,999,999.9999
그렇지 않으면 소수점 이하 2 자리로 충분하면 DECIMAL (13,2)
src : https://rietta.com/blog/best-data-types-for-currencymoney-in/
10000을 곱하고 Visual Basic 및 Office의 "Currency"와 같은 BIGINT로 저장합니다. 참조 https://msdn.microsoft.com/en-us/library/office/gg264338.aspx를
deimal(10,2)
내가 사용하는 것입니다 ... 예상 크기에 따라 값을 조정할 수 있습니다