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); |
私の環境では、これでうまくいきました。
MySqlへの対処 に記述されていた方法でうまくいきました。
ありがとうございます。