10

私は昨日、この問題について数時間耳を傾けてきました。

エンコードが「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を読みました。接続文字セットと照合順序を調べましたが、そこには何も役に立ちませんでした。

ありがとう、マット

4

3 に答える 3

32

次のように --default-character-set=name オプションを追加してみましたか:

mysql --default-character-set=utf8 -h ddd -u zzz -p dbname < dump.sql

以前にその問題があり、そのオプションを使用した後に機能しました。

それが役に立てば幸い!

于 2008-09-30T12:02:57.430 に答える
0

うーん...わかりました、解決策を見つけたようです。

ここでの原因は MySQL ではありません。dump.sqlスクリプトを変更せずに、単純なダンプとロードを実行しました。つまり、「set names latin2」とテーブルの文字セットをそのまま残しました。次に、元の CMSMS インストールを新しいデータベースに切り替えたところ、正しく機能しました。したがって、実際にはデータベースでのエンコーディングは問題ありません。少なくとも、古いホスティングプロバイダーで使用していたCMSMSのインストールでは問題なく動作します(CMSMSは文字エンコーディングで面白いことをしているようです)。

新しいホスティング プロバイダーで動作させるには、CMSMS インストールの lib/adodb/drivers/adodb-mysql.inc.php に次の行を追加する必要がありました。

mysql_query('set names latin2',$this->_connectionID);

これは、この投稿のソリューションを少し変更したものです。そこにも正確なラインを見つけることができます。したがって、mysql クライアントの構成の問題のようです。

于 2008-09-30T12:00:16.113 に答える
0

私にとっての解決策:

mysql_connectの後(またはmysql_select_dbの後)に、php ファイルでこのオプションを設定します。

mysql_query("SET NAMES 'utf8'");
于 2014-01-16T09:08:31.283 に答える