Bagaimanakah MySQL Mengendalikan Trailing Whitespace dalam Medan Unik dan Apakah Penyelesaiannya?

Susan Sarandon
Lepaskan: 2024-10-31 20:59:29
asal
751 orang telah melayarinya

How Does MySQL Handle Trailing Whitespace in Unique Fields and What Are the Workarounds?

Pangkalan data MySQL menyimpan medan unik tanpa mengekori ruang kosong

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!