UTF-8エンコードダンプをMySQLにロードする
質問
昨日、この問題について数時間にわたって耳を傾けてきました。
MySQL 4.1.22サーバー上に、エンコードを<!> quot; UTF-8 Unicode(utf8)<!> quot;に設定したデータベースがあります。 (phpMyAdminが報告したとおり)。このデータベースのテーブルには、デフォルトの文字セットが latin2 に設定されています。しかし、それを使用するWebアプリケーション(PHPで作成されたCMS Made Simple)は、 utf8 ...
にページを表示しますしかし、これを台無しにすると、実際に動作します。 Webアプリは文字を正しく表示します(主にチェコ語とポーランド語が使用されます)。
実行:<!> quot; mysqldump -u xxx -p -h yyy dbname <!> gt; dump.sql <!> quot;。これにより、次のSQLスクリプトが得られます。
- UTF-8 で表示すると、エディター(Notepad +など)で完璧に見えます-すべての文字が正しく表示されます
- スクリプト内のすべてのテーブルのデフォルトの文字セットは latin2 に設定されています
- <!> quot; / *!40101 SET NAMES latin2 * /; <!> quot;はじめの行(他の設定の中で)
今、このデータベースをMySQL 5.0.67で実行されている別のサーバーにエクスポートし、サーバーエンコーディングを<!> quot; UTF-8 Unicode(utf8)<!> quot;に設定します。 CMS Made Simpleインストール全体をコピーし、dump.sqlスクリプトをコピーして、<!> quot; mysql -h ddd -u zzz -p dbname <!> lt;を実行しました。 dump.sql <!> quot;。その後、CMSMS Webページを表示するときにすべてのキャラクターがスクランブルされます。
設定しようとしました:
SET character_set_client = utf8;
SET character_set_connection = latin2;
そして、すべての組み合わせ(安全を期すために、それが意味をなさない場合でも):latin2 / utf8、latin2 / latin2、utf8 / utf8など-助けにはなりません。すべてのキャラクターはまだスクランブルされていますが、時には異なる方法で:)。
また、スクリプトですべてのlatin2設定をutf8に置き換えてみました(テーブルの名前とデフォルトの文字セットを設定します)。なし。
このエンコーディング全体が実際にどのように機能するかをほんの少しの言葉で説明できるMySQLの専門家はいますか(結局は簡単だと思います)。 9.1.4。を読みました。接続文字セットと照合順序が役立つものは見つかりませんでした。
ありがとう、 マット
解決 2
うーん...わかりました、解決策を見つけたようです。
ここでは、MySQLが原因ではありません。 dump.sqlスクリプトを変更せずに、簡単なダンプとロードを行いました。つまり、<!> quot; set names latin2 <!> quot;そして、テーブルの文字セットはそのままでした。次に、元のCMSMSインストールを新しいデータベースに切り替えました...正常に機能しました。したがって、実際のデータベースのエンコードは問題ありません。少なくとも、以前のホスティングプロバイダーで行ったCMSMSインストールでは問題なく動作します(CMSMSは文字エンコードで面白いことをします)。
新しいホスティングプロバイダーで動作させるには、実際にCMSMSインストールのlib / adodb / drivers / adodb-mysql.inc.phpに次の行を追加する必要がありました。
mysql_query('set names latin2',$this->_connectionID);
これは、この投稿から少し変更されたソリューションです。そこにも正確な行を見つけることができます。したがって、mysqlクライアントの構成の問題のように見えます。
他のヒント
次のように--default-character-set = nameオプションを追加しようとしましたか:
mysql --default-character-set=utf8 -h ddd -u zzz -p dbname < dump.sql
以前にその問題があり、そのオプションを使用した後に機能しました。
お役に立てばと思います!
解決策:
mysql_connect の後(または mysql_select_db の後)、phpファイルでこのオプションを設定します。.
mysql_query("SET NAMES 'utf8'");