1. ホーム
  2. マイスル

[解決済み】UTF-8:一般?Bin?ユニコード?

2022-04-18 03:15:08

質問

様々なタイプのデータについて、どの照合順序を使用すべきかを考えています。保存するコンテンツは、100%ユーザー投稿のものです。

私の理解では、UTF-8 Binaryではなく、UTF-8 General CI (Case-Insensitive) を使用すべきです。しかし、UTF-8汎用CIとUTF-8ユニコードCIの明確な区別がわかりません。

  1. ユーザー投稿コンテンツは、UTF-8 GeneralとUTF-8 Unicode CIのどちらのカラムに格納すべきですか?
  2. UTF-8 Binaryはどのようなデータに適用されるのでしょうか?

どのように解決するのですか?

一般的には utf8_general_ci よりも高速です。 utf8_unicode_ci が、正解率は低い。

以下はその違いです。

任意のUnicode文字セットに対して。 general_ci 照合順序で実行される操作は、_unicode_ci 照合順序で実行される操作よりも高速になります。 . 例えば、utf8_general_ci照合順序の比較は、utf8_unicode_ciの比較よりも高速ですが、若干正確さに欠けます。この理由は、utf8_unicode_ciが展開のようなマッピングをサポートしているからです。つまり、ある文字が他の文字の組み合わせと等しいものとして比較される場合です。utf8_general_ci はレガシー照合順序で、展開、収縮、無視可能な文字をサポートしていません。また、文字間の一対一の比較しかできません。

引用元 http://dev.mysql.com/doc/refman/5.0/en/charset-unicode-sets.html

より詳細な説明は、MySQL フォーラムの以下の投稿をご覧ください。 http://forums.mysql.com/read.php?103,187048,188748

utf8_bin に関しては。 どちらも utf8_general_ci utf8_unicode_ci は大文字と小文字を区別せずに比較します。それに対して utf8_bin は大文字と小文字を区別します。 (というのは、文字のバイナリ値を比較するからです(その他の違いもあります)。