mysql最大行大小

mysql最大行大小,mysql,database,size,Mysql,Database,Size,我不知道为什么我在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。这包括存储开销,请查看手册。您必须将某些列更改为文本或blob 反而 mysql -

我不知道为什么我在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。这包括存储开销,请查看手册。您必须将某些列更改为文本或blob

反而

 mysql -D database --default_character_set utf8 -e "ALTER TABLE abc_folder ADD COLUMN lev10 varchar(50000);"
换句话说,一个更大的varchar()条目被接受并正常工作。
有人知道发生了什么吗?

此错误意味着在表abc_文件夹中,如果没有文本或BLOB类型的列,一行将超过65535字节。 65535是可由无符号16位二进制数表示的最高数字。如前所述:

尽管InnoDB在内部支持大于65535字节的行大小,但MySQL本身对所有列的组合大小施加了65535的行大小限制:

这意味着在内部,MySQL可能使用16字节的数字来存储行的大小

为了纠正您的错误,我建议将VARCHAR(5000)更改为文本或使用多个表。 使用文本如果要对列施加5000字节的限制,则在插入表时应使用truncate函数。你可以用它

INSERT INTO abc_folder (lev10) VALUES (SUBSTR('Some Text',0, 5000))

我假设
varchar()
在某个地方变成了某种类型的
text
数据类型,但在文档中找不到对此的引用。请提供
SHOW CREATE TABLE fnbl\u folder
。这可能有助于@GordonLinoff的评论,也可能解释发生了什么。
INSERT INTO abc_folder (lev10) VALUES (SUBSTR('Some Text',0, 5000))