テーブルを作成したい325カラム:
CREATE TABLE NAMESCHEMA.NAMETABLE
(
ROW_ID TEXT NOT NULL , //this is the primary key
324 column of these types:
CHAR(1),
DATE,
DECIMAL(10,0),
DECIMAL(10,7),
TEXT,
LONG,
) ROW_FORMAT=COMPRESSED;
私はすべてのVARCHARをTEXTに置き換え、追加しましたバラクーダMySQL の my.ini ファイルには、次の属性が追加されます。
innodb_file_per_table=1
innodb_file_format=Barracuda
innodb_file_format_check = ON
しかし、まだこのエラーが発生します:
Error Code: 1118
Row size too large (> 8126). Changing some columns to TEXT or BLOB may help. In current row format, BLOB prefix of 0 bytes is stored inline.
編集: レガシー アプリケーション/システム/データベースであるため、データベースの構造を変更することはできません。新しいテーブルの作成は、レガシー データベースのエクスポートです。
編集2: 他の質問と似たような質問を書いたのですが、その中にはVARCHARやBarracudaなどインターネットで見つけた解決策がいくつかありましたが、それでも問題が解決しないので、他の回答があるかどうかを確認するために、すでに古典的な回答が含まれている新しい質問を開くことにしました。
ベストアンサー1
ここですべての解決策を試しましたが、このパラメータのみ
innodb_strict_mode = 0
私の一日を解決してくれました...
マニュアルより:
innodb_strict_mode 設定は、CREATE TABLE、ALTER TABLE、および CREATE INDEX ステートメントの構文エラーの処理に影響します。innodb_strict_mode はレコード サイズのチェックも有効にするため、レコードが選択したページ サイズに対して大きすぎるために INSERT または UPDATE が失敗することはありません。