SQL错误:行大小对于VARCHAR(20)太大

时间:2019-03-06 13:46:31

标签: mysql innodb

我正在尝试创建一个名为“ brand_slug”的类型为VARCHAR(20),可为空,归类为“ utf8mb4_unicode_ci”的列,并且出现错误:

  

SQL错误:行大小太大。所用表格的最大行大小   不计BLOB的类型是65535。

奇怪的是,对于某些VARCHAR列,它使我最多可以将其设置为255,而对于其他VARCHAR列,则只能将其设置为50或75,在这种情况下甚至不能使用表。所有这些都发生在同一张表中。

我正在使用InnoDB引擎。

2 个答案:

答案 0 :(得分:0)

InnoDB表的解决方案通常是更改行格式:

ALTER TABLE mytable ROW_FORMAT=DYNAMIC;

行大小仍然有一个有限的限制,但是将能够在行中容纳更多的VARCHAR / BLOB / TEXT列。

在执行此操作之前,必须有效以下MySQL选项:

innodb_file_format = Barracuda
innodb_file_per_table = ON

有关更多信息,请阅读文档:

答案 1 :(得分:0)

我怀疑(没有看到SHOW CREATE TABLE)您编写模式的风格具有以下大多数缺陷:

  • 请勿在{{1​​}}上盲目使用(255);使用合理的限制。
  • 在单个表中没有数百个字符串。
  • 考虑“规范化”具有很多重复值的所有字符串。