MySQLの文字コードをUTF-8に変更

PHPからPDOを使用してMySQLに接続する際に、文字コードの関係で日本語が表示できないことがあったので, その際の設定メモ. 

環境

OS : CentOS 6

PHP7.2.12

MySQL5.1.71

 MySQLの設定

show variables like '%char%';

上記コマンドでデータベースの文字コード設定を確認します.

f:id:shsm385:20190220181319p:plain

文字コードが latin1 になっていることが確認できます.

今回は文字コードutf-8 に変更していきます.  /etc/my.cnf という設定ファイルから変更を行います.

[mysqld]
# [mysqld] の最後尾部分に追記
character-set-server=utf8

# 追記
[client]
default-character-set=utf8

上記の設定を追加してmysql server を再起動させます.

f:id:shsm385:20190220182121p:plain

再起動を行ったら, データベースの文字コードをもう一度確認します.

f:id:shsm385:20190220182403p:plain

PHPでの文字コードの指定

$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"が使用可能なので、そちらで設定したほうがよさそう.