首頁  >  文章  >  資料庫  >  為什麼「Harligt」和「Härligt」在 MySQL 中回傳相同的結果?看看排序規則和字元規範化。

為什麼「Harligt」和「Härligt」在 MySQL 中回傳相同的結果?看看排序規則和字元規範化。

DDD
DDD原創
2024-10-26 22:48:30425瀏覽

Why Does

MySQL 對特殊字元的處理:一個悖論解釋

在MySQL 中,執行涉及特殊字元的查詢,如'Å' 、'Ä'、和「Ö」常引發有關結果一致性的問題。例如,使用「Harligt」和「Härligt」進行查詢會產生相同的結果,讓使用者感到困惑。

這種現象歸因於 MySQL 的預設排序規則設置,特別是“utf8_general_ci”和“utf8_unicode_ci”。這些排序規則透過將某些 unicode 字元(包括斯堪的納維亞字母)等同於其英語等效字元(例如“ä = A”)來規範化它們。這種規範化簡化了比較操作和搜索,但在某些情況下可能會不方便。

要解決此問題,請考慮以下選項:

  • 使用不同的排序規則: 像「utf8_bin」這樣的排序規則保留字元值,包括特殊字符,但可能會對其他操作產生影響。
  • 在查詢中指定排序規則:對於要覆寫預設排序規則的特定查詢,將「COLLATE utf8_bin」附加到查詢中。範例:
select * from topics where name='Harligt' COLLATE utf8_bin;
  • 建立自訂排序規則: 如果上述解決方案都無法滿足您的需求,您可以建立適合您特定要求的自訂排序規則。

值得注意的是,如果沒有特殊字元的規範化,MySQL 中不區分大小寫的 LIKE 操作將無法執行。不過,相關討論可以在這裡找到:

  • [尋找不區分大小寫的 MySQL 排序規則,其中「a」! =“ä”](https://dba.stackexchange.com/questions/231116/尋找-大小寫不敏感-mysql-collat​​ion-where-a-a)
  • [MYSQL區分大小寫搜尋utf8_bin字段](https://stackoverflow.com/questions/9704962/mysql-case-sensitive-搜尋utf8-bin-field)

以上是為什麼「Harligt」和「Härligt」在 MySQL 中回傳相同的結果?看看排序規則和字元規範化。的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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