首頁  >  文章  >  資料庫  >  MySQL 如何處理唯一欄位中的尾隨空格以及解決方法是什麼?

MySQL 如何處理唯一欄位中的尾隨空格以及解決方法是什麼?

Susan Sarandon
Susan Sarandon原創
2024-10-31 20:59:29757瀏覽

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

MySQL 資料庫儲存不帶尾隨空格的唯一欄位

問題:

在MySQL 資料庫中,欄位中,唯一應確保沒有兩行具有相同的值。但是,當將帶有尾隨空格的資料插入到唯一欄位時,空格將被忽略,從而允許儲存重複值。當需要在使用者輸入中保留前導和尾隨空格時,這會帶來問題。

解:

根本問題源自於 MySQL 對字串比較中尾隨空格的處理。所有 MySQL 排序規則都是 PADSPACE 類型,這表示 CHAR 和 VARCHAR 欄位類型中的尾隨空格都會被忽略。此行為旨在確保字串比較的一致性,但它與保留尾隨空格的需要相衝突。

要解決此問題,有兩個主要解決方案:

1。將資料儲存為 VARBINARY:

不要使用基於文字的資料類型(如 CHAR 或 VARCHAR),而是考慮將資料儲存為 VARBINARY。 VARBINARY 將資料儲存為位元組序列,保留所有字符,包括尾隨空格。這可確保唯一欄位真正根據確切值(包括空格)強制執行唯一性。

範例:

<code class="sql">CREATE TABLE test_ws ( `value` VARBINARY(255) UNIQUE );</code>

2.使用NO PAD 排序規則(MySQL 8.0 及更高版本):

MySQL 版本8.0 及更高版本引進了NO PAD 排序規則。這些排序規則在字串比較期間忽略填充字符,包括尾隨空格。透過使用 NO PAD 排序規則,您可以根據確切值(包括尾隨空格)強制執行唯一性。

範例:

<code class="sql">CREATE TABLE test_ws ( `value` VARCHAR(255) UNIQUE COLLATE utf8mb4_0900_ai_ci );</code>

注意:

基於NO PAD 整理欄位對資料進行排序可能會產生意外結果,因為排序發生在在位元組值而不是感知的字元序列上。

以上是MySQL 如何處理唯一欄位中的尾隨空格以及解決方法是什麼?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn