上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
「Got error 139 from storage engine」

というエラーを目にしたらそういう事です。

MySQLの微妙に痛い制限

Got error 139 from storage engine

InnoDB テーブル上の制約

VARCHAR、BLOB そして TEXT カラム以外の最大行長は、データベース ページの半分よりも少し短いです。これは、最大行長は約8000バイトであるという事です。LONGBLOB と LONGTEXT カラムは4GB 以下である必要があり、BLOB と TEXT カラムを含んだ合計行長は4GB 以下でなければいけません。InnoDB が行内の VARCHAR、BLOB、または TEXT カラムの最初の7684バイトを格納し、残りは別のページに格納されます。



このマニュアルの日本語が非常に分かり難い上に、原文だと7684バイトではなく、768バイトです。ちなみに768バイトが正解です。

何故、タイトルが10個かというと、768*10=7680バイトでほぼこの8KB制限に届いてしまうから。768バイトというとUTF-8では256文字というわけで、まぁ割と普通に有りえるサイズです。

リンク先二つ目のnix氏のブログによると設定による変更は不可という事なので、何だかなぁという仕様です。というか、にわかには信じ難い話なので私の読み違いか、検証違いだと信じたくなります。(アルファベットだけの世界ならこれぐらいの上限サイズで十分だよ、という事かもしれませんが)

とりあえずの回避策としては、テーブルを分割するか、カラムを統合するか、最大文字数制限を厳しくして稼ぐか、何にしてもテーブル設計や仕様に影響する事なのでしんどい話です。
コメント
この記事へのコメント
コメントを投稿する
URL:
Comment:
Pass:
秘密: 管理者にだけ表示を許可する
 
トラックバック
この記事のトラックバックURL
この記事へのトラックバック
copyright © 2005 The elephant vanishes all rights reserved.
Powered by FC2ブログ.
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。