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
・・・これもだめ
・・・わけわからん