6

もう一度、私は奇妙でトリッキーな問題を抱えています。

私はMySQLデータベース(およびそれに関してはサーバー上の他のすべて)をUTF-8に変換して、テキストを取得して別のデータベースに配置するときにテキストを変換する必要がないように取り組んできました。

私は部分的に成功したと思いSHOW VARIABLES LIKE 'character_set%'ます。

character_set_client utf8 
character_set_connection utf8 
character_set_database utf8 
character_set_filesystem binary 
character_set_results utf8 
character_set_server utf8 
character_set_system utf8

ただし、それでもmysql_client_encoding($con);戻りlatin1、出力ではすべての特殊文字が�に置き換えられます。私の結論は、ドキュメントヘッダーとmy.iniで次のコードを使用してutf-8を指定しているにもかかわらず、クライアントまたはPHPとMySQLデータベース間の接続でlatin1を使用しているということです。

character-set-server = utf8
character-set-client = utf8
default-character-set = utf8

編集: [client]、[mysqld]、[mysql]の両方に上記の設定を追加しました

使用しmysql_query('SET NAMES utf8;');たりmysql_set_charset("utf8");、テキストが正しく表示されたりする場合、それは解決策ではなく、一時的な修正にすぎません。

PHP(またはlatin1に戻すもの)にutf-8を使用させる方法を知っている人はいますか?

私はWindows2003ServerとApache2を使用していることに言及する必要があります。

4

1 に答える 1

2

私はMySQLデータベース(およびそれに関してはサーバー上の他のすべて)をUTF-8に変換して、テキストを取得して別のデータベースに配置するときにテキストを変換する必要がないように取り組んできました。

ターゲットデータベース(またはシステム)がデフォルトでUTF-8を使用するように設定されていること、および接続に使用しているライブラリが正しい文字セットを使用していることを確認する必要があります。データがUTF-8にあるからといって、それが普遍的に互換性があるわけではありません。

mysql_query('SET NAMES utf8;');を使用する場合 またはmysql_set_charset( "utf8"); テキストは正しく表示されますが、私にとってはそれは解決策ではなく、一時的な修正にすぎません。

これが適切な解決策です。接続のエンコーディングによって、クライアント(この場合はPHP)がデータを受信する方法が決まります。

デフォルトとして設定するには; MySQLを適切に構成してから、サーバーを再起動する必要があります。

[client]
default-character-set=UTF8

これは、コマンドラインクライアントを含むすべてのクライアントに影響することに注意してくださいmysql

于 2012-08-30T19:35:56.250 に答える