Apa tipe data SQL terbaik untuk nilai mata uang? Saya menggunakan MySQL tetapi lebih suka tipe database independen.
Apa tipe data SQL terbaik untuk nilai mata uang? Saya menggunakan MySQL tetapi lebih suka tipe database independen.
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.
(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 )
DBASE: 10,5 (10 integer, 5 desimal) MYSQL: 15,5 (15 digit, 10 integer (15-5), 5 desimal)
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.
Tanggapan Assaf dari
Tergantung pada berapa banyak uang yang Anda dapatkan ...
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.
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
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 ..
Jika aplikasi Anda perlu menangani nilai uang hingga satu triliun maka ini harus bekerja: 13,2 Jika Anda harus mematuhi GAAP (Prinsip Akuntansi yang Diterima Secara Umum), maka gunakan: 13,4
Biasanya Anda harus menjumlahkan nilai uang Anda pada 13,4 sebelum pembulatan output menjadi 13,2.
Sumber: Jenis data terbaik untuk menyimpan nilai moneter dalam MySQL
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 nilai N
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 nilainya N
adalah setidaknya jumlah digit sebelum .
jumlah terbesar yang Anda harapkan disimpan di bidang itu + 7
.
Itu tergantung pada sifat data. Anda harus merenungkannya terlebih dahulu.
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:
Skala presisi Oracle 31 31 T-SQL 38 38 MySQL 65 30 PostgreSQL 131072 16383
September 2015 Pemerintah Zimbabwe menyatakan akan menukar dolar Zimbabwe dengan dolar AS pada tingkat 1 USD hingga 35 kuadriliun dolar Zimbabwe 5
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?).
- (1 juta USD) * (35 Quadrylion ZWL) = (10 ^ 6) * (35 * 10 ^ 15) = 35 * 10 ^ 21
- kita butuh:
- 2 digit untuk menyimpan "35"
- 21 digit untuk menyimpan angka nol
- 4 digit di sebelah kanan titik desimal
- ini membuat desimal (27,4) yang harganya 15 byte untuk setiap entri
- kita dapat menambahkan satu digit lagi di sebelah kiri tanpa biaya - kita memiliki desimal (28,4) selama 15 byte
- Sekarang kita dapat menyimpan 10 juta transaksi USD yang dinyatakan dalam dolar Zimbabwe, atau aman dari serangan hiperinflasi lain, yang diharapkan tidak akan terjadi