さまざまな種類のデータにどのような照合を使用すべきかを検討しています。保存するコンテンツの 100% はユーザーが送信したものです。
私の理解では、UTF-8 バイナリではなく、UTF-8 一般 CI (大文字と小文字を区別しない) を使用する必要があると思います。ただし、UTF-8 一般 CI と UTF-8 Unicode CI の明確な違いが見つかりません。
- ユーザーが送信したコンテンツは、UTF-8 General 列または UTF-8 Unicode CI 列に保存する必要がありますか?
- UTF-8 バイナリはどのような種類のデータに適用できますか?
ベストアンサー1
一般的に、utf8_general_ci はutf8_unicode_ciよりも高速ですが、正確性は劣ります。
違いは次のとおりです。
どの Unicode 文字セットでも、_general_ci 照合順序を使用して実行される操作は、_unicode_ci 照合順序よりも高速です。たとえば、utf8_general_ci 照合順序の比較は utf8_unicode_ci の比較よりも高速ですが、正確性は若干劣ります。これは、utf8_unicode_ci が拡張などのマッピングをサポートしているためです。拡張とは、1 つの文字が他の文字の組み合わせと等しいと判断されることです。たとえば、ドイツ語やその他の言語では、「ß」は「ss」と等しくなります。utf8_unicode_ci は、短縮形と無視できる文字もサポートしています。utf8_general_ci は、拡張、短縮形、無視できる文字をサポートしないレガシー照合順序です。文字間の 1 対 1 の比較のみを実行できます。
引用元:文字セット ユニコード セット
より詳細な説明については、MySQL フォーラムの次の投稿をお読みください。参考文献
utf8_bin については、utf8_general_ciとutf8_unicode_ciはどちらも大文字と小文字を区別しない比較を実行します。対照的に、utf8_bin は文字のバイナリ値を比較するため、大文字と小文字を区別します(他の違いもあります)。