RDBMS に MySQL を採用したシステムで、VARCHAR の代わりに TEXT を頻用するプロジェクトがあった。そんなに昔の話ではない。つい最近作られたシステムだ。 VARCHAR も TEXT も可変長文字列を格納する型で、アプリケーションから見るとあまり違いがない。どちらも SQL で同じように扱える。しかし、こんな場合は VARCHAR を使うのが当然じゃないか。わざわざ TEXT を使う理由がない。そう思ったのだが、調べてみると意外に複雑な問題であった。 使う SQL はほとんど同じでも、VARCHAR と TEXT の MySQL 内部における扱いは、だいぶ異なる。InnoDB の場合は、長い VARCHAR は自動的に TEXT と同じように扱われる。MyISAM の場合、VARCHAR は行の中にインラインで保管されるが、TEXT は別オブジェクトとして格納される。従