[解決済み] utf8_general_ciとutf8_unicode_ciの違いは何ですか?重複
質問
重複の可能性があります。
utf8_general_ci と utf8_unicode_ci の違いは何ですか?
mysqlデータベースで有望と思われるunicodeの2つのオプションがあります。
utf8_general_ci unicode (multilingual), case-insensitive
utf8_unicode_ci unicode (multilingual), case-insensitive
utf8_general_ci と utf8_unicode_ci の違いについて説明してください。データベースを設計する際に、どちらかを選択するとどのような影響がありますか?
どのように解決するのですか?
utf8_general_ci
は非常に単純で、Unicode 上では非常に壊れている照合順序で、次のようになります。
不正確な結果
を与えるものです。 これは何をするかというと
- 正準分解のための Unicode 正規化形式 D に変換します。
- 任意の結合文字を削除します。
- 大文字に変換します
これはUnicode上では正しく動作しません。なぜなら、Unicodeのケーシングを理解できないからです。Unicode のケーシングだけでも、ASCII を意識したアプローチでは処理しきれないほど複雑です。たとえば
- ǩ」の小文字は「ß」ですが、「ß」の大文字は「SS」です。
- ギリシャ語のシグマは小文字は2つありますが、大文字は1つしかありません。"Σίσυφος "を考えてみてください。
- ø" のような文字は "o" と発音区分符号に分解されないので、正しくソートされません。
他にも多くの微妙な点があります。
-
utf8_unicode_ci
は、標準の Unicode 照合順序アルゴリズム は、いわゆる拡張や合字をサポートしており、例えば、以下のようになります。 ドイツ語の文字 ß (U+00DF LETTER SHARP S) は "ss" の近くにソートされます。 文字 Œ (U+0152 LATIN CAPITAL LIGATURE OE) は "OE" の近くにソートされます。
utf8_general_ci
は展開/合字をサポートしないため、これらの文字をすべて一文字としてソートします。
はこれらの文字を単一文字としてソートし、時には間違った順序でソートします。
-
utf8_unicode_ci
は 概ね の方が、すべてのスクリプトでより正確です。 例えば、キリル文字のブロックにutf8_unicode_ci
は、これらの言語すべてで問題ありません。 ロシア語、ブルガリア語、ベラルーシ語、マケドニア語、セルビア語、そしてウクライナ語です。 一方、utf8_general_ci はロシア語とブルガリア語のキリル文字のサブセットに対してのみ有効です。 ベラルーシ語、マケドニア語、セルビア語、ウクライナ語で使われる余分な文字については で使用される余分な文字はうまくソートされません。
のコストは
utf8_unicode_ci
であることです。
が小さい
ビット
よりも遅いことです。
utf8_general_ci
. しかし、これは正しさの代償なのです。間違っている速い答えがあるか、正しいが非常に遅い答えがあるか、どちらかです。どちらを選ぶかはあなた次第です。
間違った答えを出すことを正当化することは非常に難しいので、以下のように仮定するのがベストです。
utf8_general_ci
は存在しないと仮定して、常に
utf8_unicode_ci
. まあ、間違った答えを出したいなら別ですが。
ソースはこちら http://forums.mysql.com/read.php?103,187048,188748#msg-188748
関連
-
[解決済み】ValueError: 値の長さがインデックスの長さと一致しない|Pandas DataFrame.unique()
-
Djangoマイグレーションエラー 外部キー制約を追加できない
-
[解決済み] 文字列リテラルの前にある'b'文字は何を意味するのでしょうか?
-
MySQL 接続タイムアウト。エラー SQLSTATE[HY000] [2002] 接続がタイムアウトしました 解決済み
-
[解決済み] MySQLでコマンドラインを使用してユーザーアカウントのリストを取得するにはどうすればよいですか?
-
[解決済み] utf8_general_ciとutf8_unicode_ciの違いは何ですか?
-
[解決済み] UTF-8とBOMなしUTF-8の違いは何ですか?
-
[解決済み] UTF-8とUnicodeの違いは何ですか?
-
[解決済み】文字列フラグ "u "と "r "は一体何をするのでしょうか、そして生の文字列リテラルとは何でしょうか?
-
[解決済み] エンコード/デコードの違いは何ですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
MySQL Innodb インデックスメカニズム詳細解説
-
mysqlのデータ圧縮性能比較 詳細
-
MySQL インタビューの質問 - ハッシュインデックスを設定する方法
-
MySQLデータベースで数百万件のデータを10秒間で挿入
-
SQL Server のトランザクションは、try キャッチに記述しなければ、中間ステートメントがエラーを報告してもコミットされます。
-
Mysqlの使用中に発生したエラーの一部
-
[解決済み] MySQLのAUTO_INCREMENTをリセットする方法
-
[解決済み] ブーリアン値を格納するために使用するMySQLデータ型
-
[解決済み] utf8_general_ciとutf8_unicode_ciの違いは何ですか?
-
[解決済み】データベース全体のCHARACTER SET(およびCOLLATION)を変更する方法は?