「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > MySQL で「Harligt」と「Härligt」が同じ結果を返すのはなぜですか?照合順序と文字の正規化について見てみましょう。

MySQL で「Harligt」と「Härligt」が同じ結果を返すのはなぜですか?照合順序と文字の正規化について見てみましょう。

2024 年 11 月 9 日に公開
ブラウズ:884

Why Does \

MySQL の特殊文字の扱い: パラドックスの説明

MySQL では、「Å」、「Ä」、 「Ö」は、結果の一貫性に関して疑問を引き起こすことがよくあります。たとえば、「Harligt」と「Härligt」を含むクエリは同じ結果を返し、ユーザーを当惑させます。

この現象は、MySQL のデフォルトの照合設定、具体的には「utf8_general_ci」と「utf8_unicode_ci」に起因すると考えられます。これらの照合順序は、スカンジナビア文字を含む特定の Unicode 文字を、対応する英語の文字と同一視することによって正規化します (例: "Ä = A")。この正規化により、比較操作と検索が簡素化されますが、特定のシナリオでは不便になる可能性があります。

この問題を解決するには、次のオプションを検討してください:

  • 別の照合順序を使用する: 「utf8_bin」のような照合順序では、特殊文字を含む文字値が保持されますが、他の操作に影響を与える可能性があります。
  • 照合順序の指定in Queries: デフォルトの照合順序をオーバーライドする特定のクエリの場合は、クエリに「COLLATE utf8_bin」を追加します。例:
select * from topics where name='Harligt' COLLATE utf8_bin;
  • カスタム照合順序の作成: 上記のいずれの解決策でもない場合ニーズに合わせて、特定の要件に合ったカスタム照合順序を作成できます。

注目に値します。 MySQL における大文字と小文字を区別しない LIKE 操作は、特殊文字を正規化しないと実行できないということです。ただし、関連する議論はここで見つけることができます:

  • [大文字と小文字を区別しない MySQL 照合順序 (“a” != “ä” を探しています)](https://dba.stackexchange.com/questions/231116/ looking-for-case-insensitive-mysql-collat​​ion-where-a-a)
  • [MYSQL utf8_bin の大文字と小文字を区別する検索フィールド](https://stackoverflow.com/questions/9704962/mysql-case-sensitive-search-for-utf8-bin-field)
最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3