残念ながら、phpMyAdminは、文字セットについてMySQLと正しく通信する最初のphpアプリケーションの1つです。問題は、データベースに最初から正しいUTF-8文字列が格納されていないことが原因である可能性があります。
phpMyAdminで文字を正しく表示するには、データをデータベースに正しく保存する必要があります。ただし、データベースを正しい文字セットに変換すると、MySQLが提供する文字セット関連の機能を認識しないWebアプリが破損することがよくあります。
質問してもいいですか:MySQL>バージョン4.1ですか?データベースはどのWebアプリ用ですか? phpBB?データベースは古いバージョンのWebアプリから移行されましたか、それとも古いバージョンのMySQLから移行されましたか?
使用しているWebアプリが古すぎてサポートされていない場合は、兄弟にしないことをお勧めします。データベースを実際のUTF-8に変換するのは、Webアプリがデータベースを正しく読み取ることができると確信している場合のみです。
編集:
MySQLは>4.1です。つまり、文字セットに対応しています。データベースの文字セット照合設定は何ですか? latin1
を使用していると確信しています 、ASCIIのMySQL名であり、UTF-8テキストを「バイト」でデータベースに格納します。
文字セットに依存しないクライアント(つまり、mysql-cliおよびphp-mod-mysql)の場合、文字はデータベースとの間でバイトとして転送されるため、正しく表示されます。 phpMyAdminでは、バイトが読み取られてASCII文字として表示されます。これは、ごちゃごちゃしたテキストのようです。
アジアの多くの地域で、MySQL 4.0が廃止された数年前(2005年?)に数え切れないほどの時間が費やされていました。問題やごちゃごちゃしたデータに対処するための標準的な方法があります:
- データベースを
.sql
としてバックアップします - UTF-8対応のテキストエディタで開き、正しく表示されることを確認します。
-
charset collation latin1_general_ci
を探します 、latin1
を置き換えますutf8
へ 。 - 新しいSQLファイルとして保存します。バックアップを上書きしないでください
- 新しいファイルをインポートすると、phpMyAdminで正しく表示されるようになり、Webアプリの日本語が質問マークになります。それは正常です。
- php-mod-mysqlに依存するphpWebアプリの場合、
mysql_query("SET NAMES UTF8");
を挿入します。mysql_connect()
の後 、これで疑問符はなくなります。 -
次の構成を追加します
my.ini
mysql-cliの場合:# CLIENT SECTION [mysql] default-character-set=utf8 # SERVER SECTION [mysqld] default-character-set=utf8
MySQLの文字セットの詳細については、マニュアルを参照してください: http://dev.mysql.com/doc/refman/5.0/en/charset-server.html
Webアプリがphp-mod-mysqlを使用してデータベースに接続していると想定していることに注意してください(したがって、mysql_connect()
関数)、php-mod-mysqlは私が考えることができる唯一の拡張機能であるため、今日でも問題を引き起こしていると思います。
phpMyAdminはphp-mod-mysqliを使用してMySQLに接続します。フレームワーク*に切り替えてphpプロジェクトを開発するため、使用方法を学びませんでした。あなたもそうすることを強くお勧めします。
- 多くのフレームワーク、例: CodeIgniter、Zendは、mysqliまたはpdoを使用してデータベースに接続します。 mod-mysql関数は、パフォーマンスとスケーラビリティの問題を引き起こす廃止されたものと見なされます。また、プロジェクトを特定の種類のデータベースに結び付けたくない場合もあります。