Rumah > Artikel > pangkalan data > Bagaimanakah MySQL Mengendalikan Trailing Whitespace dalam Medan Unik dan Apakah Penyelesaiannya?
Isu:
Dalam pangkalan data MySQL, medan unik harus memastikan bahawa tiada dua baris mempunyai nilai yang sama. Walau bagaimanapun, apabila memasukkan data dengan ruang putih mengekori ke dalam medan unik, ruang putih diabaikan, membenarkan nilai pendua disimpan. Ini menimbulkan masalah apabila memerlukan pemeliharaan ruang putih terkemuka dan mengekori dalam input pengguna.
Penyelesaian:
Isu asas berpunca daripada pengendalian MySQL mengekori ruang putih dalam perbandingan rentetan . Semua himpunan MySQL adalah dari jenis PADSPACE, yang bermaksud ruang belakang diabaikan dalam kedua-dua jenis medan CHAR dan VARCHAR. Tingkah laku ini bertujuan untuk memastikan perbandingan rentetan yang konsisten, tetapi ia bercanggah dengan keperluan untuk mengekalkan ruang kosong tertinggal.
Untuk menyelesaikan isu ini, terdapat dua penyelesaian utama:
1. Simpan data sebagai VARBINAR:
Daripada menggunakan jenis data berasaskan teks seperti CHAR atau VARCHAR, pertimbangkan untuk menyimpan data sebagai VARbinARI. VARBINARY menyimpan data sebagai jujukan bait, mengekalkan semua aksara, termasuk mengekori ruang kosong. Ini memastikan medan unik benar-benar menguatkuasakan keunikan berdasarkan nilai yang tepat, termasuk ruang putih.
Contoh:
<code class="sql">CREATE TABLE test_ws ( `value` VARBINARY(255) UNIQUE );</code>
2. Gunakan NO PAD collations (MySQL 8.0 and above):
MySQL versions 8.0 and later introduced NO PAD collations. Pengumpulan ini mengabaikan aksara pelapik semasa perbandingan rentetan, termasuk mengekori ruang kosong. Dengan menggunakan pengumpulan NO PAD, anda boleh menguatkuasakan keunikan berdasarkan nilai yang tepat, termasuk mengekori ruang kosong.
Contoh:
<code class="sql">CREATE TABLE test_ws ( `value` VARCHAR(255) UNIQUE COLLATE utf8mb4_0900_ai_ci );</code>
Nota: Isih data berdasarkan TIADA medan terkumpul PAD mungkin menghasilkan hasil yang tidak dijangka kerana pengisihan berlaku pada nilai bait dan bukannya jujukan aksara yang dirasakan.
Atas ialah kandungan terperinci Bagaimanakah MySQL Mengendalikan Trailing Whitespace dalam Medan Unik dan Apakah Penyelesaiannya?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!