【问题标题】:mysql maximum row sizemysql最大行大小
【发布时间】:2015-06-22 17:33:12
【问题描述】:

我不知道为什么我在 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() 条目被接受并正常工作。 有人知道怎么回事吗?

【问题讨论】:

  • 我假设某处 varchar() 被转换为某种类型的 text 数据类型,但我在文档中找不到对此的引用。
  • 请提供SHOW CREATE TABLE fnbl_folder。它可能对@GordonLinoff 的评论有所帮助,并且可以解释发生了什么。

标签: mysql database size


【解决方案1】:

此错误意味着在您的表 abc_folder 中,如果没有 TEXT 或 BLOBS 类型的列,一行将大于 65535 字节。 65535 是可以用无符号 16 位二进制数表示的最高数。正如here 所述:

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

mysql> CREATE TABLE t (a VARCHAR(8000), b VARCHAR(10000),
    -> c VARCHAR(10000), d VARCHAR(10000), e VARCHAR(10000),
    -> f VARCHAR(10000), g VARCHAR(10000)) ENGINE=InnoDB;
ERROR 1118 (42000): Row size too large. The maximum row size for the
used table type, not counting BLOBs, is 65535. You have to change some
columns to TEXT or BLOBs

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-02-13
    • 2012-06-17
    • 2021-08-22
    • 1970-01-01
    • 2019-06-27
    • 2014-11-05
    • 2012-05-03
    相关资源
    最近更新 更多