PDO使ってMySQLに絵文字を突っ込んだら書いたはずのデータが失われた問題(未解決)

とりあえず、書き込んだ後で書いてるmemcacheには残っていたので、PDOかMySQLがあやしい。


あ[絵文字] の場合は書かれるが、[絵文字]あ とした場合は書かれないみたい。
・・・文字コード周りの処理があやしい


ALTER TABLE hoge CHARACTER SET utf8mb4;
・・・として、4バイトのUTF-8を受け付けるようにしたけどそれでも通らない

mysql> UPDATE hoge SET content = UNHEX('f09f8e83f09f8e83f09f8e89') WHERE content_id = 533;
Query OK, 0 rows affected, 1 warning (0.00 sec)
Rows matched: 1  Changed: 0  Warnings: 1

mysql> SHOW WARNINGS\G
*************************** 1. row ***************************
  Level: Warning
   Code: 1366
Message: Incorrect string value: '\xF0\x9F\x8E\x83\xF0\x9F...' for column 'content' at row 1
1 row in set (0.00 sec)

うん、書き込もうとした文字列をいったん16進数に直してからUNHEXしてUPDATEかけたら再現した
どうも、MySQL側の問題臭い

CHARACTER SET を utf8mb4にして叩いてもダメ

mysql> ALTER TABLE hoge CHARACTER SET binary;
Query OK, 533 rows affected (0.52 sec)
Records: 533  Duplicates: 0  Warnings: 0

mysql> SET NAMES binary;
Query OK, 0 rows affected (0.00 sec)

mysql> UPDATE hoge SET content = UNHEX('f09f8e83f09f8e83f09f8e89') WHERE content_id = 533;
Query OK, 0 rows affected, 1 warning (0.05 sec)
Rows matched: 1  Changed: 0  Warnings: 1

・・・これもだめ

・・・わけわからん