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)


これで多い日も安心、でもセッションへのデータ突っ込みすぎはなるべく自重する。