2

私のデータベースでは、照合順序はもともとutf8_general_ci でした。しかし、ソート精度を向上させるためにutf8_unicode_ciが必要であることに気付きました。

したがって、phpmyadminを使用してすべてのデータベースをエクスポートし、エクスポートされたSQLファイルに「COLLATION」という単語が表示されないことを確認しました(バイナリに設定されている1つのテーブルで2回だけを除く)ので、通常、このスクリプトは照合にとらわれず、インポート時に特定の照合順序を使用しますが、データベースのデフォルトを使用します。

すべてのテーブルを削除した後、データベースの照合順序が utf8_unicode_ci に変更され、インポート スクリプトが phpmyadmin から実行されましたしかし、その結果、すべてのテーブルとすべての列がutf8_general_ci照合で再び表示されます (そして、並べ替えは正しくありません)。どうして??そして、それを変えるために何をすべきか?

PS エクスポート/インポート スクリプトには、先頭にコメント行が含まれています。

/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;

インポート中に影響があるかどうかはわかりませんが、mysql コンソールを開いた後、コマンドshow variables like 'collation_connection'は COLLATION_CONNECTION を cp852_general_ci として表示します。ただし、phpmyadmin->variables では、変数 'c​​ollat​​ion_connection' がutf8_general_ciに設定されています。しかし、それを変更する方法はありません。

4

1 に答える 1

2

これは、データベース エクスポートがすべてのテーブルに文字セットを設定しているために発生し、そのような句には、接続の照合ではなく、文字セットに依存するデフォルトの照合が付属しています。utf8_general_ci は、utf8 のデフォルトの照合です。

ALTER TABLE tablename CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;これが手頃な場合は、テーブルを変換するか、データベースのエクスポートを編集する必要があります。

MySQL コンソールに関しては、コマンド ライン クライアントは Windows ではほとんど壊れています。Unicode をサポート、表示、または読み取ることはありません。そのクライアントの接続ごとの照合順序は、ロケールの Windows のいわゆる OEM 文字セットと一致します。これは、移植可能なソフトウェアで回避するのが難しい Windows の誤機能です。PHPMyAdmin は Web サーバーを使用しており、この問題に悩まされることはありません。この理由だけでなく、いかなる場合でも、重大な作業には GNU/Linux のような UNIX ライクなオペレーティング システムを使用することをお勧めします。追加の利点として、Linux では MySQL、Apache、およびアプリケーション スタック全体のパフォーマンスが向上します。

于 2012-06-06T08:21:57.537 に答える