MySQLの最大行サイズに関する問題


8

MySQLに問題があります。多くのテキストフィールドを持つテーブルがあります。一部のデータを保存しようとすると、このエラーが発生します。

行サイズが大きすぎます。使用されるテーブルタイプの最大行サイズ(BLOBは含まない)は8126です。一部の列をTEXTまたはBLOBに変更する必要があります

各フィールドに格納するテキストは長すぎず、各フィールドに数段落しかありません。

私に何ができる?

回答:


9

答えてくれてありがとう。あなたが投稿したリンクは、学習を始めるのに非常に役立つベースでした。

最後に私はこのページを見つけました:http : //download.oracle.com/docs/cd/E17952_01/refman-5.5-en/innodb-compression-usage.html

そして、[mysqld]セクションに次の2行を追加してmy.cnfを構成しました。

innodb_file_per_table
innodb_file_format = Barracuda

次にALTER、phpMyAdminを介してこのコマンドを使用してテーブルを作成します。

ALTER TABLE nombre_tabla
 ENGINE=InnoDB
 ROW_FORMAT=COMPRESSED 
 KEY_BLOCK_SIZE=8; 
 SHOW WARNINGS;

上記のリンクで読むことができる他の設定を使用することも可能ですが、これらは私にとってはうまくいきました。


私は、COMPRESSEDとBarracudaの欠点の詳細についてはあまり知りませんでした。それがよりよく、これを解決する場合は、なぜそれを常に使用しないのですか?
テッド

3

MySQLの行サイズについて詳しく説明しているこの記事をご覧になることをお勧めします。TEXTまたはBLOBフィールドを使用する場合でも、ページ内の各フィールドの最初の768バイトをインラインで格納するため、行サイズが8K(InnoDBの制限)を超える可能性があることに注意することが重要です。これを修正する最も簡単な方法は、InnoDBでBarracudaファイル形式を使用することです。これは基本的に、最初の768バイトを格納するのではなく、テキストデータへの20バイトのポインタのみを格納することで、問題を完全に取り除きます。


1

まあ、mysqlが言うようにしてください:大きなフィールドをvarcharからテキストまたはblobに変換します(ALTER TABLE)。テキストフィールドはvarcharとほぼ同じように動作します(インデックスにはプレフィックス長が必要ですが、それでも機能します)が、個別に格納されます。

このリファレンスは、すべての標準のmysqlテーブルエンジンの正確な制限を示しています。

http://dev.mysql.com/doc/refman/5.0/en/column-count-limit.html

そして、ここにテキストフィールドについて知っておくべきすべてがあります:

http://dev.mysql.com/doc/refman/5.0/en/blob.html


あなたの答えをありがとう@korkman、問題が発生したとき、私のフィールドはすでにテキストとして定義されていました。リンクの提案を見ていきます。
Memochipan

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.