Saya perlu menyimpan 128 bit integer tanpa tanda ke MySQL dan saya bertanya-tanya apa tipe data terbaik untuk menyimpan angka sebesar itu.
Saat ini, saya menggunakan binary(16)
tetapi itu melibatkan banyak fungsi konversi pack(/huge number in hex .../)
.
Apakah ada tipe data terbaik untuk menyimpan integer unsigned 128 bit?
Jawaban:
Saya tidak tahu apa cara terbaik untuk menyimpannya - tetapi setidaknya ada opsi yang lebih baik daripada menggunakan
varchar(39)
(atauvarchar(40)
jika Anda membutuhkannya ditandatangani); alih-alih gunakan adecimal(39,0)
. Dari dokumen mysql :Itu disimpan dikemas, sehingga akan memakan ruang lebih sedikit daripada varchar ( 18 byte, jika saya melakukan matematika saya dengan benar ), dan saya berharap Anda bisa melakukan matematika secara langsung, tapi saya sudah tidak pernah mencoba dengan angka sebesar itu untuk melihat apa yang terjadi.
sumber
Saya menemukan diri saya mengajukan pertanyaan ini dan dari semua posting yang saya baca tidak pernah menemukan perbandingan kinerja. Jadi, inilah usaha saya.
Saya telah membuat tabel berikut, diisi dengan 2.000.000 alamat ip acak dari 100 jaringan acak.
Lalu saya PILIH semua alamat ip untuk setiap jaringan dan catat waktu respons. Waktu respons rata-rata pada tabel twobigints adalah sekitar 1 detik, sedangkan pada tabel biner sekitar seperseratus detik.
Ini pertanyaannya.
Waktu respons rata-rata:
sumber
Saya percaya satu-satunya pilihan lain adalah menyimpannya di
varchar(39)
lapangan.sumber