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

DDD
リリース: 2024-10-26 22:48:30
オリジナル
422 人が閲覧しました

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 操作は、特殊文字を正規化しないと実行できないことに注意してください。ただし、関連する議論はここで見つけることができます:

  • [“a” != “ä” である大文字と小文字を区別しない MySQL 照合順序を探しています](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)

以上がMySQL で「Harligt」と「Härligt」が同じ結果を返すのはなぜですか?照合順序と文字の正規化について見てみましょう。の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!