はじめに
PDOでデータベースに絵文字が含まれている文字列をデータベースに保存しようとした際にSQLSTATE[HY000]: General error: 1366 Incorrect string value: '\xF0\x9F\x8D\xB8 !...' for column 'message' at row 1 in ...
というエラーがでしまいました。
こちらの方の対応方法を備忘録として残しておこうと思います。
対応方法
原因としてはutf8のデータベースにutf8mb4の絵文字を保存しようとしていたのエラーが出ていました。
- utf8は3バイトしか対応していない
- 絵文字は4バイト
PDOのインスタンスを作るときにcharsetをutf8mb4で指定してあげると無事に保存することができました。
try {
$dbh = new PDO('mysql:host=localhost; dbname=procir_suizu266; charset=utf8mb4', 'suizu266', 'c3mbe7kmfj');
} catch (PDOException $e) {
echo 'DB接続エラー:' . $e->getMessage();
die();
}