プロが教えるわが家の防犯対策術!

プログラムを初めて組んでいるのですが、どうしてもデータベースを使いたいので
phpmyadminを使い、いろいろいじっているのですが、phpでデータベースの内容を
表示したときなのですが、どうしても文字化けが直りません。
(日本語だけ文字化けします)

いろいろググってみて以下で解決できそうなのですが、書いてある事がさっぱりわからず
どなたか分かりやすく解説してもらえませんでしょうか。

phpの文字コードはUTF8 データベース照合順序はutf8_general_ciにはして
あります。
最初の

「SET NAMES utf8」というクエリを発行。

というのはすでに意味がわかりません・・。


---------------------------------------------------------
【状況】

PHPからMySQLにデータ登録し、phpMyAdminで値を閲覧すると、日本語が文字化けしている。
ただし、その状態の値をPHPで取得・表示は普通にできる。
※PHP、HTMLの文字コードは「UTF8」。データベースの照合順序は「utf8_general_ci」
【対応】(以下の「xampp_path」はXAMPPのインストールパス)

データベース接続後に「SET NAMES utf8」というクエリを発行。
もしくはPHP5.2.2以降なら「mysql_set_charset(‘utf8′);」を実行しても良い。
「xampp_path/mysql/bin/my.ini」に以下の項目を追加・修正

[mysqld]
character_set_server=utf8
skip-character-set-client-handshake

[mysqldump]
default-character-set=utf8

[mysql]
default-character-set=utf8

「xampp_path/phpMyAdmin/config.inc.php」に以下の項目を追加・修正

$cfg['DefaultLang'] = 'ja-utf-8';
$cfg['DefaultCharset'] = 'ja-utf-8';

A 回答 (1件)

xamppであればMySQL側を弄る必要はありません。



>もしくはPHP5.2.2以降なら「mysql_set_charset(‘utf8′);」を実行しても良い。

MySQL関数であればそうですが、すでにMySQL関数は「先がない」状態です。PDOやMySQLiを使ってください(マニュアルを読めば載っているのですが・・・)。

http://php.net/manual/ja/function.mysql-set-char …


PDOなどで接続するのであれば、接続文字列(DSN)でcharsetを指定します。

$pdo = new PDO("mysql:host=$host;dbname=$dbname;charset=utf8", $user, $pass);

set namesを使うのはDSNで指定できない(phpが5.3.6未満のケース)だけですが、その場合でも

$options = array(PDO::MYSQL_ATTR_INIT_COMMAND => 'set names utf8);
$pdo = new PDO("mysql:host=$host;dbname=$dbname", $user, $pass, $options);

のように書いておくといいです(わざわざ$pdo->query('set names utf8')を書くのは避ける)。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!