我不知道为什么我在mysql 5.6.24
上有这种奇怪的行为,你能帮助我吗?你认为这是一个错误
mysql -D database --default_character_set utf8 -e "ALTER TABLE abc_folder ADD COLUMN lev10 varchar(5000);"
第1行的错误1118(42000):行大小太大。使用的表类型(不计算BLOB)的最大行大小为65535.这包括存储开销,请查看手册。您必须将某些列更改为TEXT或BLOB
而不是
mysql -D database --default_character_set utf8 -e "ALTER TABLE abc_folder ADD COLUMN lev10 varchar(50000);"
换句话说,接受更大的varchar()条目并正确工作。 有人知道发生了什么吗?
答案 0 :(得分:1)
此错误意味着在您的表abc_folder中,如果没有TEXT或BLOBS类型的列,则单个行将大于65535个字节。 65535是可以用无符号16位二进制数表示的最高数。如上所述here:
虽然InnoDB在内部支持大于65,535字节的行大小,但MySQL本身对所有列的总大小强加了行大小限制为65,535:
INSERT INTO abc_folder (lev10) VALUES (SUBSTR('Some Text',0, 5000))
这意味着在内部,MySQL可能使用16字节数来存储行的大小。
要纠正错误,我建议将VARCHAR(5000)更改为TEXT或使用多个表。 如果要在列上强加5000字节的限制,则使用TEXT,在插入表时应使用truncate函数。您可以使用substr。
{{1}}