水曜以外もどうでしょう

北海道発。食べ歩きの記録グルメ情報や北海道の見どころなどをメモ替わりに書いています。

PREV | PAGE-SELECT | NEXT

≫ EDIT

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
応援宜しくお願いします。ポチ↓↓
fC2ブログランキング にほんブログ村 グルメブログ 北海道食べ歩きへ 人気ブログランキングへ


| スポンサー広告 | --:-- | comments(-)| trackbacks(-)| TOP↑

≫ EDIT

MySQLのエラー「Row size too large」

データベースのupdate時に以下のエラーが発生。

#1118 - Row size too large (> 8126). Changing some columns to TEXT or BLOB or using ROW_FORMAT=DYNAMIC or ROW_FORMAT=COMPRESSED may help. In current row format, BLOB prefix of 768 bytes is stored inline.

ひとつのレコード(1行)の上限って8126バイトなんですね。
ROW_FORMATという言葉も、後から出るストレージエンジンという言葉も知りませんでした。

ネット検索すると、
ストレージエンジンが「InnoDB」の場合で、ROW_FORMATが「Compact」のとき、8126が上限らしいですね。
「8Kの壁」というらしいです。

で解消方法を調べると・・。

参考ページ)
http://sawara.me/mysql/2219/

エラーメッセージにもある通り、まずは、
ROW_FORMAT=DYNAMIC または ROW_FORMAT=COMPRESSED に変えたいと試みる。

以下のコマンドで、テーブルの状態を確認
SHOW TABLE STATUS LIKE 't1'

Engine: InnoDB
Row_format: Compact だと言っている。

ところが、
ALTER TABLE `t1` ROW_FORMAT=DYNAMIC;
として、もう一度 SHOW TABLE STATUS LIKE 't1' で確認しても、Row_formatが変わらないのだ。
まさに、参考ページの通り。

で、
SHOW GLOBAL VARIABLES LIKE '%innodb_file_%';
を実行して、ファイルフォーマットが、「Antelope」になっているのも参考ページと同じ。
ファイルフォーマットが「Antelope」の場合には、ROW_FORMATの変更が効かないんですかね、わかりませんが。
ファイルフォーマットを「Barracuda」にしなさいとのこと。
自前サーバーだと、/etc/my.cnfをいじるところ。しかし、今回はレンタルサーバーなのでそれができない。

じゃ、
ストレージエンジンを変えるしかないのですかね。
ストレージエンジンとはなにか知りませんでした。

参考ページ) ストレージエンジン MyISAMとInnoDBの違い
http://onlineconsultant.jp/pukiwiki/?MyISAM%E3%81%A8InnoDB%E3%81%AE%E9%81%95%E3%81%84

今回のアプリケーションでは、トランザクションが使えなくても良いでしょう・・
ということで、MyISAMへの変更をすることにした。

ALTER TABLE `t1` engine=MyISAM;

これで、1行のバイト数制限が緩んだ。
64KBなのかな? ちょっと詳しくはわかりません。
とりあえず、8KBでエラーになっていたデータは通りました。

結論から書けば良いのですがね、苦労の過程を書いてみました。

スポンサーサイト
応援宜しくお願いします。ポチ↓↓
fC2ブログランキング にほんブログ村 グルメブログ 北海道食べ歩きへ 人気ブログランキングへ


| データベース | 01:39 | comments:0| trackbacks:0| TOP↑

COMMENT















非公開コメント

TRACKBACK URL

http://vmemo.blog36.fc2.com/tb.php/705-28e7dd37

TRACKBACK

PREV | PAGE-SELECT | NEXT

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。