概要
PHPのserialize関数でシリアライズした文字列をMySQLに保存し、それをMySQLから取り出してunserialize()関数でアンシリアライズするとfalseが返されてしまうことがある。
原因
様々な原因が考えられるが、最も多いのはサイズオーバーだと思われる。
MySQLのデータ型がTEXT型の場合は上限が65535バイトであり、オブジェクト配列などサイズの大きいデータをシリアライズした場合はそれを超えてしまう。
解決方法
データ型をMEDIUMTEXTやLONGTEXTにすると最大長が大きくなるため、大きいデータも保存することができる。
また、base64_encode(serialize($hoge))
のようにシリアライズした値を圧縮することでサイズを小さくすることができる。
この場合、アンシリアライズはunserialize(base64_decode($hoge))
となる。
コメント