0

utf8 としてエンコードされた名前のテーブルがあります。php で utf8_decode を呼び出すことができるので、それらを表示することは問題ありませんが、その列で mysql を並べ替えると、名前の順序が間違っています。

例: 「A」と「B」の名前の間に「Ö」で始まる名前があります。

編集 1: 列の型は VARCHAR であり、列とテーブルの両方の照合は、多言語であるため (現在) ut8_general_ci です。以前は、問題があれば latin1_swedish_ci でした。

編集 2: 別の問題が見つかりました。テーブルを埋めたとき、すでに utf8 だったにもかかわらず、誤ってデータに utf8_encode を適用しました。修正しましたが、問題は残ります。しかし、ウェブサイトに出力するときに utf8_decode を呼び出す必要はありません...

4

3 に答える 3

0

組み込みの照合のいずれかがデータをソートする方法に不満がある場合は、独自の照合を作成できます。

http://dev.mysql.com/doc/refman/5.0/en/adding-collat​​ion.html

于 2012-08-04T08:27:58.240 に答える
0

UTF8 コンテンツを格納するテーブル内の列に対して、UTF8 文字セットと照合順序を定義する必要があります。MySQL の並べ替えは、選択した照合に基づいて適切に機能します。

http://dev.mysql.com/doc/refman/5.0/en/charset.html

于 2012-08-02T19:23:04.370 に答える
0

mysql では、並べ替えは列の照合に基づいています。通常、自然言語による utf8 照合があります。データが 1 つの言語の場合は、その照合を使用する必要があります。クエリ レベルで使用される照合順序を変更する必要がある場合は、次のようにCOLLATEキーワードを使用します。

SELECT k FROM t1 ORDER BY k COLLATE utf8_hungarian_ci;

何を選択すればよいかわからない場合は、utf8_general_ci照合 ( demo ) を使用してください。

于 2012-08-02T19:25:22.030 に答える