それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

pdoで文字化けを防ぐutf-8を設定する

phpMySQL(mariaDB)にアクセスすると文字化けをする

いまどき文字化けするなんて思わなかった。古いデータベースだし mysql 関数でやってるやつだからなぁ

set name しなくても PDO のドライバの初期化のタイミングで文字コードを指定できるようになっている。

対策

<?php
$opts = array(
    PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8',
); 
$dsn = 'mysql:host=example.com;dbname=my_db',
//
$pdo = new PDO( $dsn,  'root', 'pass', $opts);

ペアになってるもの

mysqli_query mysql_query で

<?php
$sqlstr = "set NAME utf8";
mysqli_query( $dbh, $sqlstr );

MySQLのテーブル設定はこんな感じ。

) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci