mySQL データベースから値を並べ替えると、次の間違った並べ替え順序が表示されます。
SELECT * FROM tt_news WHERE pid=19 AND deleted=0 AND hidden=0 order by title ASC
A
B
C
...
Ä
Ö
この並べ替えの問題に対して何ができますか? Ä は A の間または後にある必要があります。
MySQL サーバーのバージョン: UTF-8 をサポートする 5.0.51a
これはデータベースの照合に関係していることがわかりました (ドイツ語のリンクを参照してください: http://mysql-faq.sourceforge.net/tables3.html )。
setDBinit
スクリプトは、 set toSET NAMES utf8
およびforceCharset
set toでTYPO3 に埋め込まれUTF-8
ます。したがって、UTF-8 データは ISO-8859-1 (Latin 1) で保存する必要があります。
列には typetext
と collation がありますlatin1_swedish_ci
。SHOW VARIABLES LIKE 'collation%'
phpMyAdmin に入ると、
collation_connection utf8_general_ci
collation_database latin1_swedish_ci
collation_server latin1_swedish_ci
SHOW VARIABLES LIKE '%CHARACTER_SET%';
phpMyAdminで教えてくれます
character_set_client utf8
character_set_connection utf8
character_set_database latin1
character_set_filesystem binary
character_set_results utf8
character_set_server latin1
character_set_system utf8
character_sets_dir /usr/share/mysql/charsets/
試行番号 1:
スクリプトで使用しようとしSET NAMES utf8;
ましたが、何も変わりませんでした。
試行番号 2:
PHP で並べ替えを実行したかったのですが (SOQ: How to sort an array of associative arrays by value of a given key in PHP?に従って)、並べ替えは変更されませんでした。
$title=array();
foreach ($result as $key => $row) {
$title[$key] = $row['title'];
}
array_multisort($title, SORT_ASC, $result);
試行番号 3:
この mySQL ステートメントを使用しました ( http://blog.mixable.de/mysql-order-by-und-deutsche-umlaute/から取得):
SELECT * FROM tt_news WHERE pid=19 AND deleted=0 AND hidden=0 order by title COLLATE latin1_swedish_ci;
並べ方に変化なし。を使用utf-8
すると、エラーが発生します (照合は許可されません)。
試行番号 4:
SELECT *, REPLACE( REPLACE( REPLACE( REPLACE( REPLACE( REPLACE(REPLACE(title, 'Ä', 'A'), 'Ö', 'O'), 'Ü', 'U'), 'ä', 'a'), 'ö', 'o'), 'ü','u'), 'ß', 's') AS sortiert FROM tt_news WHERE pid=19 AND deleted=0 AND hidden=0 ORDER BY sortiert
ソース: http://www.php-faq.de/q-mysql-umlaute-sortieren.html
phpMyAdmin では機能しますが、スクリプトでは機能しません。次のエラーが表示されます。Illegal mix of collations (latin1_swedish_ci,IMPLICIT), (utf8_general_ci,COERCIBLE), (utf8_general_ci,COERCIBLE) for operation 'replace'
文字セットや照合順序を変更せずに PHP で正しい並べ替えを行うことはできますか?