PHPからPDOを使用してMySQLに接続する際に、文字コードの関係で日本語が表示できないことがあったので, その際の設定メモ.
環境
OS : CentOS 6
PHP : 7.2.12
MySQL : 5.1.71
show variables like '%char%';
上記コマンドでデータベースの文字コード設定を確認します.
文字コードが latin1 になっていることが確認できます.
今回は文字コードを utf-8 に変更していきます. /etc/my.cnf という設定ファイルから変更を行います.
[mysqld]
# [mysqld] の最後尾部分に追記
character-set-server=utf8
# 追記
[client]
default-character-set=utf8
上記の設定を追加してmysql server を再起動させます.
再起動を行ったら, データベースの文字コードをもう一度確認します.
$db['host'] = 'localhost';
$db['user'] = 'user';
$db['pass'] = '*************';
$db['dbname'] = 'db name';
$dsn = sprintf('mysql: host=%s; dbname=%s; charset=utf8', $db['host'], $db['dbname']);
try{
$pdo = new PDO($dsn, $db['user'], $db['pass'], array(PDO::ATTR_ERRMODE=>PDO::ERRMODE_EXCEPTION));
$sql = "select * from tablename";
$stmt = $pdo->query($sql);
foreach($stmt as $res){
print_r($res);
}
$stmt->closeCursor();
}catch(PDOException $e){
$errormsg = 'Error Database';
$e->getMessage();
}
上記コードの charset='' の部分で文字コードの指定を行います.
自分はMySQLのバージョンが5.1.71なので, 使えませんでしたが, 5.3 から "utf8mb4"が使用可能なので、そちらで設定したほうがよさそう.