4

mysql テーブルで選択クエリを実行していて、テーブルの「名前」列で並べ替えようとしています。
名前の列には、英字の名前とâのようなラテン文字の名前の両方が含まれています。
以下の問題に直面しています。
私が実行したクエリは、次のように並べ替えられた結果を返します。
たとえば、名前に「archer」、「aaakash」、「â hayden」、「bourne」、「jason」が含まれている場合
、クエリによって返される結果は次のように並べられます
。 "、"アーチャー"、"ヘイデン"、"ボーン"、"ジェイソン"

ただし、Unicodeコードポイントに基づいて注文したい(以下のように)
「aaakash」、「archer」、「bourne」、「jason」、「â hayden」

(順序で â hayden の位置の違いを参照してください)
Unicode 文字セットでの文字の位置に基づいて結果を順序付けるにはどうすればよいですか?

4

1 に答える 1

10

ただし、Unicodeコードポイントに基づいて注文したい(以下のように)

utf8_binUnicode コード ポイントを使用して並べ替えるには、おそらく照合を使用する必要があります。

正確には、接尾辞は各文字のバイナリ表現で_binソートすることを示しています。


注文時にデフォルトの照合をオーバーライドORDER BY ... COLLATEするには、次を使用します。

ドキュメントを言い換えると、次のようになります。

SELECT k
FROM t1
ORDER BY k COLLATE utf8_bin;

テキスト列がutf8 エンコーディングを使用していない場合CONVERTは、次のようにする必要があります。

SELECT k
FROM t1
ORDER BY CONVERT(k USING utf8) COLLATE utf8_bin;

utf8これは最も一般的な Unicode エンコーディングであるため、ここで例として 使用したことに注意してください。しかし、MySQL サーバーはおそらくucs2("UTF-16") などの他の Unicode エンコーディングをサポートしています。

于 2013-08-13T13:42:46.127 に答える