@84kureMySQLのテキスト型にはVARCHARと?TEXT(TINYTEXT、TEXT、MEDIUMTEXT、LONGTEXT)がある。長さの制限が違うだけで、どれを使ってもテキストを格納できるが、それぞれ特性は違うのだろう。プログラミングを実践する上でどのテキスト型を使うのが適切なのか判断できるように、これらの違いについてきちんと理解しておきたい。ググってみると、テキスト型の違いを論じているページがいろいろ見つかる。Togetterhttp://togetter.com/li/54358一番上のページからリンクされていた英語ページの説明が的を得ている。NicJ.nethttp://nicj.net/mysql-text-vs-varchar-performance/これらのページを読んでわかったことは、MyISAMストレージエンジンに限って言えば「VARCHAR型はDBストレージ内にデータそのものが格納されるが、TEXT型だとデータは外部に格納されてDBストレージにはそのポインタが格納される」ということ(InnoDBは違うらしい)。これより、データのアクセス速度は、ポインタを追ってデータの実体にたどり着かなければならないTEXT型よりも、DBストレージに直接データが格納されているVARCHAR型のほうが高速であることは容易に推測できる。TEXT型のサイズに神経質になる必要が無い反面、VARCHAR型のサイズはデータベースのストレージサイズの制限に影響されるので、大きいサイズのデータをVARCHAR型で格納することはコスト高になることも想像に容易い。2番目の英語ページでは以下の結論で結んでいる。ストレージの使い方に由来して、TINYTEXTを使うよりもVARCHARを使ったほうが望ましい。NULL以外のDEFAULT値をセットしたい場合には、VARCHAR(あるいはCHAR)を使うしかない。64KBよりも長い文字列を格納する必要がある場合は、MEDIUMTEXTやLONGTEXTを使う。VARCHARは64KBより長い文字列を格納できないから。マルチバイト文字列を格納する場合には更に注意が必要。VARCHAR(255)は255文字を格納できるが、マルチバイト文字列を使う場合にはデータサイズが255バイトよりも大きくなることに注意。小規模なシステムでは大した問題にはならないが、マスなデータを取り扱うシステムではVARCHAR型と?TEXT型の選び方が大事だろう。自分がどうしてVARCHAR型あるいは?TEXT型を選んだのか、きちんとした理由が説明できるようにしておきたい。