Apa tipe data SQL terbaik untuk nilai mata uang? Saya menggunakan MySQL tetapi lebih suka tipe database independen.
mysql
sql
sqldatatypes
Brian Fisher
sumber
sumber
Jawaban:
Sesuatu seperti
Decimal(19,4)
biasanya bekerja dengan cukup baik dalam banyak kasus. Anda dapat menyesuaikan skala dan presisi agar sesuai dengan kebutuhan angka yang perlu Anda simpan. Bahkan dalam SQL Server, saya cenderung tidak menggunakan "money
" karena tidak standar.sumber
(19,4)
daripada menggunakan(19,2)
?Satu-satunya hal yang harus Anda perhatikan adalah jika Anda bermigrasi dari satu basis data ke basis data lain, Anda mungkin menemukan bahwa DECIMAL (19,4) dan DECIMAL (19,4) memiliki arti yang berbeda
( http://dev.mysql.com/doc/refman/5.1/en/precision-math-decimal-changes.html )
sumber
Penting juga untuk menentukan berapa banyak tempat desimal yang mungkin diperlukan untuk perhitungan Anda.
Saya mengerjakan aplikasi harga saham yang membutuhkan perhitungan harga satu juta saham. Harga saham yang dikutip harus disimpan hingga 7 digit akurasi.
sumber
Tanggapan Assaf dari
kedengarannya kurang ajar, tapi sebenarnya itu penting.
Hanya hari ini kami mengalami masalah ketika catatan gagal dimasukkan ke dalam tabel Rate kami, karena salah satu kolom (GrossRate) disetel ke Desimal (11,4), dan departemen Produk kami baru saja mendapatkan kontrak untuk kamar di beberapa resor yang menakjubkan di Bora Bora, yang dijual seharga beberapa juta Francs Pasifik per malam ... sesuatu yang tidak pernah diantisipasi ketika skema basis data dirancang 10 tahun lalu.
sumber
Untuk aplikasi akuntansi, sangat umum untuk menyimpan nilai-nilai sebagai bilangan bulat (beberapa bahkan mengatakan bahwa itu satu - satunya cara). Untuk mendapatkan ide, ambil jumlah transaksi (misalkan $ 100,23) dan gandakan dengan 100, 1000, 10000, dll. Untuk mendapatkan akurasi yang Anda butuhkan. Jadi, jika Anda hanya perlu menyimpan sen dan dapat dengan aman mengumpulkan atau menurunkan, cukup kalikan dengan 100. Dalam contoh saya, itu akan membuat 10023 sebagai bilangan bulat untuk disimpan. Anda akan menghemat ruang dalam basis data dan membandingkan dua bilangan bulat jauh lebih mudah daripada membandingkan dua pelampung. $ 0,02 saya
sumber
DECIMAL
? Anda harus sangat berhati-hati untuk selalu menerjemahkan uang, pabrik, atau millrays ke dalam dolar, pada waktu yang tepat.entri super terlambat tapi GAAP adalah aturan praktis yang baik ..
Sumber: Jenis data terbaik untuk menyimpan nilai moneter dalam MySQL
sumber
Anda dapat menggunakan sesuatu seperti
DECIMAL(19,2)
secara default untuk semua nilai moneter Anda, tetapi jika Anda hanya akan menyimpan nilai lebih rendah dari $ 1.000, itu hanya akan membuang-buang ruang database yang berharga.Untuk sebagian besar implementasi,
DECIMAL(N,2)
akan cukup, di mana nilaiN
setidaknya jumlah digit sebelum.
jumlah terbesar yang Anda harapkan untuk disimpan di bidang itu+ 5
. Jadi, jika Anda tidak pernah berharap untuk menyimpan nilai lebih dari 999999,99,DECIMAL(11,2)
harus lebih dari cukup (sampai harapan berubah).Jika Anda ingin patuh pada GAAP , Anda bisa menggunakannya
DECIMAL(N,4)
, di mana nilainyaN
adalah setidaknya jumlah digit sebelum.
jumlah terbesar yang Anda harapkan disimpan di bidang itu+ 7
.sumber
Itu tergantung pada sifat data. Anda harus merenungkannya terlebih dahulu.
Kasus saya
Kenapa (M, 4)?
Pengorbanan
Ekstrim kompatibel
Meskipun MySQL memungkinkan Anda menggunakan desimal (65,30), 31 untuk skala dan 30 untuk presisi tampaknya menjadi batasan kami jika kami ingin membiarkan opsi transfer terbuka.
Skala dan presisi maksimum dalam RDBMS paling umum:
6 , 7 , 8 , 9
Ekstrim yang Wajar
Kita cenderung mengatakan "ya, tentu ... saya tidak akan membutuhkan angka gila". Yah, orang Zimbabwe dulu juga mengatakan itu. Belum lama ini.
Bayangkan Anda perlu mencatat transaksi 1 juta USD dalam dolar Zimbabwe (mungkin tidak hari ini, tetapi siapa yang tahu bagaimana ini akan terlihat dalam 10 tahun dari sekarang?).
sumber
Meskipun ini mungkin terlambat, tetapi akan membantu orang lain. Dari pengalaman dan penelitian saya, saya menjadi tahu dan menerima desimal (19, 6). Itulah saat bekerja dengan php dan mysql. ketika bekerja dengan sejumlah besar uang dan nilai tukar
sumber