Menyimpan Nilai Hash SHA1 dalam MySQL: VARCHAR lwn. BINARY
Apabila menyimpan hasil cincangan SHA1 dalam pangkalan data MySQL, yang sesuai jenis dan panjang medan mesti dipertimbangkan dengan teliti. Bertentangan dengan amalan biasa, menggunakan medan VARCHAR untuk tujuan ini adalah tidak cekap.
VARCHAR lwn. BINARY
Cincangan SHA1 sentiasa sepanjang 160 bit. Medan VARCHAR direka untuk data panjang berubah-ubah, tetapi medan tersebut memperkenalkan overhed satu bait untuk panjang medan. Oleh itu, menggunakan VARCHAR untuk nilai panjang tetap, seperti cincang SHA1, adalah tidak diperlukan.
Medan binari, sebaliknya, menyimpan data binari tanpa sebarang overhed. Ia sesuai untuk nilai panjang tetap seperti cincang SHA1.
Perwakilan Aksara
Cincangan SHA1 biasanya diwakili sebagai rentetan heksadesimal, yang menggunakan 4 bit setiap aksara. Untuk menyimpan perwakilan heksadesimal cincang SHA1 dalam medan VARCHAR, ia memerlukan 160/4 = 40 aksara. Walau bagaimanapun, medan binari menggunakan 8 bit setiap aksara, membenarkan cincangan yang sama disimpan dalam medan 160/8 = 20 aksara.
Pendekatan Disyorkan
Ia adalah disyorkan untuk menggunakan BINARY(20) untuk menyimpan nilai hash SHA1 dalam MySQL. Jenis medan ini menghapuskan overhed yang dikaitkan dengan VARCHAR dan membenarkan cincangan disimpan dengan cekap. Selain itu, fungsi UNHEX boleh digunakan untuk menukar perwakilan heksadesimal cincang kepada binari sebelum menyimpannya dalam pangkalan data.
Perbandingan Storan
Perbandingan keperluan storan mendedahkan bahawa BINARY(20) lebih cekap daripada CHAR(40) untuk menyimpan nilai cincang SHA1. Sebagai contoh, dengan berjuta-juta rekod, BINARY(20) memerlukan lebih kurang 44.56M storan, manakala CHAR(40) memerlukan 64.57M. Perbezaan ini menjadi lebih ketara dengan set data yang lebih besar.
Atas ialah kandungan terperinci Untuk Menyimpan Hash SHA1 dalam MySQL: VARCHAR atau BINARY?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!