PHP, PDOでMySQL接続時の文字コード設定

MySQL接続時に文字コード"utf-8"を指定したい – だって文字化けするんだもんの巻。

"SET NAMES `utf8`" は使っちゃダメよと大垣さんがおっしゃってたのでこれは使わない。
代わりに mysql_set_charset('utf8'); を使うらしいのだけどPDOでは使えない模様。

で次のようにして解決しました。

try {
    $pdo = new PDO($db_dsn,$db_user, $db_password,
        array(
            PDO::MYSQL_ATTR_INIT_COMMAND => "SET CHARACTER SET `utf8`"
        )
    );
} catch (PDOException $e) {
    die($e->getMessage());
}

Google先生にお聞きしてあっちこっちのサイトのコードを試したのでどちらが出典なのか記録を取っておらず不明です、ごめんなさい。

これだったかも
PHP Document
http://php.net/manual/ja/ref.pdo-mysql.php
Davy Defaud氏のコメント。

「PHP, PDOでMySQL接続時の文字コード設定」への7件のフィードバック

  1. たった今、PDO+MySQLの文字化けで悩んでいたところでした。
    スパッと解決できて大変助かりました!!!

  2. $pdo = new PDO($dsn,$user,$pass,array(
    PDO::MYSQL_ATTR_READ_DEFAULT_FILE => ‘パス/my.cnf’,
    PDO::MYSQL_ATTR_READ_DEFAULT_GROUP => ‘client’,
    PDO::ATTR_EMULATE_PREPARES => false
    ));
    このmy.cnfに設定する方法が無理だったので助かります。

    $pdo->query(‘SET NAMES utf8’);
    私の環境では、こちらでも出来るようでした。

  3. 一応前のコメントのリンク先で細かく解説していますが、正直に申し上げますとこの記事の内容は根底から誤っています。「SET NAMES `utf8`」を「SET CHARACTER SET `utf8`」に変更したところで何も解決しないどころかむしろ悪化します。コメントを見ていただけたならば訂正して頂ければ幸いです。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です