web-dev-qa-db-ja.com

utf8_unicode_ciおよびöのようなスウェーデン語の文字を使用した間違ったソート順

クエリが正しい並べ替え順序を返すように、使用するエンコーディングと照合について混乱しています。

現在、私のエンコーディングはfirstnamelastnameの両方でUTF-8 Unicodeと照合順序utf8_unicode_ciです。

そして、ソート順は次のようになります:

firstname  lastname
aaa        aaa
ööö        ööö
ooo        ooo
ppp        ppp
qqq        qqq

ööö öööqqq qqqより後にする必要があります

照合順序をutf8_swedish_ciに変更すると、正しく機能します。

firstname  lastname
aaa        aaa
ooo        ooo
ppp        ppp
qqq        qqq
ööö        ööö

しかし、utf8_unicode_520_ciutf8_unicode_ciと同じ結果を返します。うまくいきませんか?

おもしろいのは、firstname照合順序をutf8_unicode_520_ciに変更するだけで機能するようだということです。

1
Cudos

興味深いことに、誰かがこの明らかな違いに対処しました。

Matthias Bynensがこの投稿に回答しました MySQL Collat​​ion utf8_unicode違い 約4年前。

彼は「ウェイトキー」に言及しました

詳細については、 nicode Consortium にアクセスしてください。

1
RolandoMySQLDBA

Öはどこでソートしますか?

  • utf8_estonian_ci:「W」と「X」の間
  • デンマーク語、アイスランド語、スウェーデン語:「Z」の後
  • utf8_gernan2_ci:2つの文字「oe」のように
  • ハンガリー語とトルコ語:「O」と「P」の間(つまり、「oz」の後)
  • その他の照合(Unicode、Unicode_520、0900を含む):文字「O」のように

これらは、utf8とutf8mb4、MySQL 8.0以前の両方に適用されます。

プログラムで生成された照合テスター

デンマーク語、アイスランド語、またはスウェーデン語は、「Ö」に対して「正しく」機能します。これら3つの違いは次のとおりです。

アイスランド語で、AZ < Á < B, E < É, IZ < Í < J, UZ < Ü < V, YZ < Ý < Z。また

danish:    zz <          Ä=Æ=ä=æ < Ö=Ø=ö=ø < Aa=Å=å < Þ=þ
icelandic: zz < Þ=þ    < Ä=Æ=ä=æ < Ö=Ø=ö=ø <    Å=å
swedish:   zz <    Å=å < Ä=Æ=ä=æ < Ö=Ø=ö=ø <          Þ=þ

(これはすべての違いがあるとは限りません。)

1
Rick James