delhi09の勉強日記

技術トピック専用のブログです。自分用のメモ書きの投稿が多いです。あくまで「勉強日記」なので記事の内容は鵜呑みにしないでください。

MySQLのカラムの文字列長について(TEXT型、LONGTEXT型)

概要

クローラーで取得したHTMLコンテンツをMySQLに保存する際に、深く考えずにカラムタイプをTEXT型にしていたら、「Data too long for column」が発生した。

環境

原因

MySQLTEXT型の最大長は65,535(約6万)文字とのこと。

また、以下のように記載されているので、マルチバイトの場合は複数文字としてカウントされるようである。

値にマルチバイト文字が含まれる場合、有効な最大長は少なくなります。各 TEXT 値は、値のバイト数を示す 2 バイト長のプリフィクスを使用して格納されます。

※ 以下、公式ドキュメント。
dev.mysql.com

今回、保存しようとしたHTMLコンテンツのバイト数を確認したところ、約19万バイトあったので、確かにTEXT型の最大長を超過していた。

$ wc -c result.html
  189956 result.html
$

対応方法

LONGTEXT型を使用する。
LONGTEXT型であれば、4,294,967,295(約40億)文字まで保存可能とのこと。

※ マルチバイトの場合は複数文字としてカウントされるという仕様は同じ。

参考

以下の記事を参考にさせて頂いた。
qiita.com