」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 為什麼「Harligt」和「Härligt」在 MySQL 中回傳相同的結果?看看排序規則和字元規範化。

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

發佈於2024-11-09
瀏覽:632

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 操作。不過,相關討論可以在這裡找到:

  • [Looking for case insensitive MySQL collat​​ion where "a" != "ä"](https://dba.stackexchange.com/questions /231116/尋找-case-insensitive-mysql-collat​​ion-where-a-a)
  • [MYSQL區分大小寫搜尋utf8_bin字段](https://stackoverflow.com/questions/9704962/mysql- case-sensitive-搜尋utf8-bin-field)
最新教學 更多>

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3