PHP+MySQL で文字化け対策

MySQLにクエリを出して呼び出した結果が「??????」で文字化けしてしまう!

こんな感じで、普通にMySQLのSELECT文で情報を取得しようとしていた訳なんですが、日本語部分が全部「????」に文字化けしてしまう。

文字化けしてしまうコード

$dblink= mysql_connect('localhost', dbuser', 'password');
mysql_set_charset("utf8", $dblink);
mysql_select_db('db_name')) {
$result = mysql_query('SELECT * FROM `wp_users_test`WHERE `display_name` !="");
$row = mysql_fetch_row($result);

調べてみると、PHP+MySQLの日本語文字化け対策には、色々な原因と対策がある。
ちなみに、ここでの前提は、プログラムもデータベースも共にUTF-8という設定です。それ以外の文字コード環境の人は適宜読み替えてください。

PHP側の対処

サーバー側でデフォルトの文字コードが設定されていなかったり、違う文字コードが指定されていたりする場合は、プログラム内で次のようなmb_系関数で明示的に指定することによって解決するかも知れない。

mb_language("uni");
mb_internal_encoding("utf-8"); //内部文字コードを変更
mb_http_input("auto");
mb_http_output("utf-8");

広告

ただし、これはMySQLとは直接関係がなく、あくまでもそのPHPプログラム内の問題。

MySQLへの対処

SET NAMESする

$dblink= mysql_connect('localhost', dbuser', 'password');
mysql_query("SET NAMES utf8",$dblink);

mysql_set_charsetする

$dblink= mysql_connect('localhost', dbuser', 'password');
mysql_set_charset("utf8", $dblink);

私の環境では、これでうまくいきました。

About: 櫻木

在野のコラムニスト。1975年生まれ。大東亜戦争の戦地の取材をライフワークとしており、台湾やインドネシアとの親交が深い。


1 thought on “PHP+MySQL で文字化け対策”

Leave a Reply

Your email address will not be published. Required fields are marked *