Mai mult
Cel mai bun tip de date pentru a stoca valori de bani în MySQL
Vreau să stocați mai multe înregistrări într-o bază de date MySQL. Toate le conține valorile bani. Dar eu nu't știu cât de multe cifre va fi introdus pentru fiecare. Care tip de date trebuie să utilizeze în acest scop? VARCHAR sau INT (sau alte tipuri de date numerice)?
259
12
De bani are nevoie de o reprezentare exactă don't folosi tipurile de date care sunt doar aproximative ca "float". Puteți utiliza un punct fix tip de date numeric pentru ca
15
este de precizie (lungime totală de valoare, inclusiv zecimale)2
este numărul de cifre după punctul zecimalA Se Vedea MySQL Tipuri Numerice:
Puteți folosi ZECIMALE " sau " NUMERIC` ambele sunt la fel
adică
ZECIMAL(10,2)
Citit bine
Eu prefer să folosesc BIGINT`, și stoca valorile în de se înmulțește cu 100, astfel încât acesta va deveni întreg.
De exemplu, pentru a reprezenta o monedă valoare de 93.49
, valoarea trebuie să fie stocate ca
9349`, în timp ce afișează valoarea putem divide cu 100 și de afișare. Aceasta va ocupa mai puțin spațiu de stocare.Depinde de nevoia ta.
Folosind
ZECIMAL(10,2)
este de obicei suficient, dar dacă ai nevoie de un pic mai precis valorile puteți setaZECIMAL(10,4)
.Dacă lucrați cu valori mari înlocui
10
cu19
.Dacă cererea dumneavoastră are nevoie să se ocupe de bani, valori de până la un trilion de atunci acest lucru ar trebui să funcționeze: 13,2 Dacă aveți nevoie pentru a se conforma cu GAAP (Principiile Contabile General Acceptate) apoi utilizați: 13,4
De obicei, ar trebui să-suma ta de bani, valori la 13,4 înainte de rotunjire de ieșire la 13,2.
Într-adevăr, acest lucru se bazează pe programator's preferințe. Eu personal folosesc: `numeric(15,4) să se conformeze Principiile Contabile General Acceptate (GAAP).
Vom folosi "dublu".
gasp
De ce?
Pentru că acesta poate reprezenta orice 15 cifre fără constrângeri pe unde punctul zecimal este. Toate pentru o amărâtă de 8 bytes!
Deci, se poate reprezenta:
0.123456789012345
123456789012345.0
...și nimic în între.
Acest lucru este util pentru că ne-am're de-a face cu monede la nivel mondial, și "dublu" poate stoca numere diferite de zecimale ne'll întâlni probabil.
Un singur "dublu" domeniu poate reprezenta 999,999,999,999,999 s în yeni Japonezi, 9,999,999,999,999.99 în dolari SUA și chiar 9,999,999.99999999 s în bitcoins
Dacă încerci să faci la fel cu zecimale, ai nevoie de zecimale(30, 15)` care costă 14 bytes.
Avertismente
Desigur, folosind "dublu" e't fără limitări.
Cu toate acestea, - l's nu pierderea de precizie ca unii tind să subliniez. Chiar dacă "dublu" în sine nu poate fi pe plan intern exact în baza 10 sistem, putem face exact de rotunjire la valoarea ne-am trage din baza de date a acestuia semnificative zecimale. Dacă este necesar, care este. (de exemplu, Dacă se's va fi scoasă, și în baza 10 de reprezentare este necesar.)
Avertismentele sunt, în orice moment vom efectua aritmetică cu ea, avem nevoie pentru a normaliza rezultatul (prin rotunjire sale semnificative zecimale) înainte:
Un alt tip de problemă este, spre deosebire de `zecimal(m, d) în cazul în care baza de date va împiedica programe de introducerea unui număr cu mai mult de " m "cifre, nu există un astfel de validări există cu "dublu". Un program ar putea introduce un utilizator introduse în valoare de 20 de cifre și it'll end up fiind înregistrate în tăcere ca un inexacte sumă.
Încercați să utilizați
acest lucru, de obicei, funcționează cu orice alte DB precum
În timp, această întrebare a fost întrebat nimeni nu a crezut despre Bitcoin preț. În caz de BTC, este probabil insuficient pentru a utiliza ZECIMAL(15,2). Daca Bitcoin va crește la $100,000 sau mai mult, vom avea nevoie de cel puțin ZECIMAL(18,9) pentru a sprijini cryptocurrencies în aplicații noastre.
ZECIMAL(18,9) ia 12 octeți în MySQL ([4 bytes pe 9 cifre][1]).Stocarea bani ca
BIGINT
înmulțit cu 100 sau mai mult, cu motivul de a utiliza mai puțin spațiu de stocare nu are nici un sens în toate "normale" situații.ZECIMAL
.ZECIMAL(13,4)
reprezintă 9 cifre + 4 fracțiune cifre (zecimale) => 4 + 2 bytes = 6 bytesBIGINT
.Dacă GAAP Conformitate este necesară sau ai nevoie de 4 zecimale:
ZECIMAL(13, 4) Care acceptă un maxim de valoare de:
$999,999,999.9999
În caz contrar, în cazul în care 2 zecimale este suficient: ZECIMAL(13,2)
src: https://rietta.com/blog/best-data-types-for-currencymoney-in/
Multiplică 10000 și magazine ca BIGINT, cum ar fi "Moneda" în Visual Basic și Birou. Vezi https://msdn.microsoft.com/en-us/library/office/gg264338.aspx