Pangkalan Data MySQL Mengabaikan Ruang Jejak Medan Unik
Apabila mencipta pangkalan data dengan medan unik dalam MySQL, nilai yang mengandungi pendahuluan atau pengekoran dijangkakan ruang harus dianggap sebagai berbeza. Walau bagaimanapun, diperhatikan bahawa ruang belakang dipangkas semasa sisipan, mengakibatkan ralat nilai pendua apabila cuba memasukkan perkataan dengan ruang putih mengekor yang berbeza-beza.
Isu asas terletak pada tingkah laku perbandingan rentetan lalai MySQL, yang mengabaikan ruang putih mengekor. Akibatnya, indeks UNIK menggunakan perbandingan rentetan standard, menyebabkannya mengabaikan ruang kosong mengekor dan menolak sisipan berdasarkan kesamaan aksara.
Untuk menyelesaikan isu ini, satu pendekatan ialah menyimpan nilai sebagai VARBINARY, yang mengekalkan ruang dan membolehkan penciptaan indeks unik yang menghormati ruang kosong mengekori. Walaupun ia membenarkan untuk menyimpan nilai dengan ruang yang berbeza-beza, adalah penting untuk ambil perhatian bahawa pengisihan mengikut nilai ini mungkin tidak membuahkan hasil yang diharapkan.
Penyelesaian alternatif ialah menggunakan pengumpulan NO PAD MySQL, yang telah diperkenalkan dalam MySQL 8.0 . Pengumpulan ini, seperti utf8mb4_0900_ai_ci, mengendalikan perbandingan rentetan tanpa mengabaikan ruang mengekor. Dengan mencipta medan unik dengan pengumpulan NO PAD, anda boleh memastikan bahawa nilai dengan ruang putih mengekori yang berbeza-beza dianggap sebagai berbeza.
Atas ialah kandungan terperinci Mengapa MySQL Mengabaikan Ruang Jejak dalam Medan Unik?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!