バイナリデータをserializeしてもprintableにはならない

本日のハマりネタ。


セッションをファイルではなくDBに格納するということで、MySQLのカラム型をmediumtextにしていたら、バイナリデータの格納で落ちるという問題に出くわした。
カスタムハンドラに渡ってくる値はserialize済みの値なのでそのまま放り込むだけよいはずだし何がいけないんだろうと思っていたが、バイナリデータはserializeしてもprintableな文字にエンコードされるわけでもなく中身がそのままのstring型データとなるので、文字列型へのINSERT/UPDATEで失敗していたというオチ。mediumblobにすることで無事解決した。


serializeされたデータというといつもこんな感じのを目にするので、テキストになるものだと思い込んでしまったのが間違いだった。

a:3:{s:4:"hoge";s:4:"hoge";s:4:"fuga";i:123;s:4:"piyo";O:8:"stdClass":1:{s:3:"foo";s:3:"foo";}}