私は昨日、この問題について数時間耳を傾けてきました。
エンコードが「UTF-8 Unicode (utf8)」に設定された MySQL 4.1.22 サーバー上のデータベースがあります (phpMyAdmin によって報告されています)。このデータベースのテーブルのデフォルトの文字セットはlatin2に設定されています。しかし、それを使ったWebアプリケーション(PHPで書かれたCMS Made Simple)はutf8でページを表示する...
これがどのように台無しにされたとしても、実際には機能します。Web アプリは文字を正しく表示します (主にチェコ語とポーランド語が使用されます)。
「mysqldump -u xxx -p -h yyy dbname > dump.sql」を実行します。これにより、次のような SQL スクリプトが得られます。
- UTF-8で表示すると、任意のエディター (Notepad+ など) で完璧に見えます- すべての文字が正しく表示されます
- スクリプト内のすべてのテーブルでは、デフォルトの文字セットがlatin2に設定されています
- 「/*!40101 SET NAMES latin2 */;」があります。最初の行(他の設定の中で)
ここで、このデータベースを MySQL 5.0.67 で実行されている別のサーバーにエクスポートしたいと考えています。サーバーのエンコードは「UTF-8 Unicode (utf8)」に設定されています。CMS Made Simple インストール全体をコピーし、dump.sql スクリプトをコピーして、「mysql -h ddd -u zzz -p dbname < dump.sql」を実行しました。その後、CMSMS Web ページを表示するときにすべての文字がスクランブルされます。
設定してみました:
SET character_set_client = utf8;
SET character_set_connection = latin2;
そして、すべての組み合わせ (私には意味がなくても念のため): latin2/utf8、latin2/latin2、utf8/utf8 など - 役に立ちません。すべての文字はまだスクランブルされていますが、場合によっては別の方法で:)。
また、スクリプト内のすべての latin2 設定を utf8 に置き換えてみました (テーブルの名前とデフォルトの文字セットを設定します)。何もない。
このエンコーディング全体が実際にどのように機能するかをほんの数語で説明できる MySQL の専門家がここにいますか? 9.1.4を読みました。接続文字セットと照合順序を調べましたが、そこには何も役に立ちませんでした。
ありがとう、マット