CodeIgniterの学習 25 - Db_sessionのsession_data列をTEXT型からMEDIUMTEXT型に変える
(08/11/10追記)
http://d.hatena.ne.jp/dix3/20081110/1226243974 にまとめました。
session_dataは、TEXT型なのだが、これだとmysqlでは65535文字以降は通常切り捨てられてしまう。
大抵はこれで事足りるのだが、session_dataに、
配列とかオブジェクトとかを一時的に突っ込み出すと、結構早い段階で破綻する。
(内部的にはsession_data列にserializeされて保存されている)
さらにデータを一部暗号化して保存しだしたりすると、
「あれ、なんか動かねー、セッションデータが復元デキネー」ってことが予想される。
「そもそもそんなにでかいデータを格納するような設計をするな!」という突っ込みは置いておいて、
現実に即して、TEXT型をMEDIUMTEXT型に拡張することにした。
mysql> alter table ci_sessions modify session_data mediumtext default '' not null; Query OK, 2 rows affected, 1 warning (0.00 sec) Records: 2 Duplicates: 0 Warnings: 0 mysql> desc ci_sessions; +---------------+------------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +---------------+------------------+------+-----+---------+-------+ | session_id | varchar(40) | NO | PRI | 0 | | | ip_address | varchar(16) | NO | | 0 | | | user_agent | varchar(50) | NO | | | | | last_activity | int(10) unsigned | NO | | 0 | | | session_data | mediumtext | NO | | | | +---------------+------------------+------+-----+---------+-------+ 5 rows in set (0.00 sec)
これで多い日も安心、でもセッションへのデータ突っ込みすぎはなるべく自重する。