mysql创建表查询时行大小太大错误

时间:2012-11-08 06:02:48

标签: mysql

我正在尝试使用以下查询创建一个表

Create Table PerformaceReport
(
campaignID int,
keywordID bigint,
keyword varchar(8000),
avgPosition decimal(18,6),
cost int,
clicks int,
 conv1PerClick int, 
 impressions int,
  day datetime,
  currency varchar(8000),
  account varchar(8000),
   timeZone varchar(8000),
    adGroup varchar(8000),
    adGroupState varchar(8000),
     approvalStatus varchar(8000),
     lowestPosition varchar(8000),
     campaign varchar(8000),
      campaignState varchar(8000),
       convManyPerClick int,
       totalConvValue decimal(18,6),
        maxCPCSource varchar(8000),
         clientName varchar(8000),
          destinationURL varchar(8000),
           device varchar(8000),
           firstPageCPC int,
            isNegative bit,
             matchType varchar(8000),
              maxCPC varchar(8000),
               maxCPM varchar(8000),
               highestPosition varchar(8000),
               qualityScore int,
               keywordState varchar(8000),
               viewThroughConv int)

我收到以下错误

#1118 - 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

任何人都可以让我知道如何避免此错误并使查询工作以创建表。

8 个答案:

答案 0 :(得分:46)

表中所有字段的总大小超过限制65535,这就是您收到此错误的原因。

对于长字符串,您应该使用text类型而不是varchar。将所有varchar(8000)替换为text,它应该有效。

或者,更好的是,使用适当的数据类型而不是“太大”的数据类型。您不需要8000个字符来存储currency,是吗?

答案 1 :(得分:6)

使用TEXT代替VARCHAR。 因为你超过了最大行数。 如果您使用TEXT,则适用于大型文本列。 最大varchar为65535。 使用varchar(65535)创建一个列,但它必须是表中唯一的列。

问题是innodb表的行大小限制,在链接下面你可以找到一些方法来解决这个问题:

http://www.mysqlperformanceblog.com/2011/04/07/innodb-row-size-limitation/ https://dba.stackexchange.com/questions/6598/innodb-create-table-error-row-size-too-large

答案 2 :(得分:1)

我同意使用适当大小的列和TEXT over VARCHAR作为第一步的答案,但如果您仍然达到限制,则可能需要更改该表的排序规则设置(如果您使用的是UTF-8或其他字符集)每个字符超过一个字节,不需要它(例如只存储英文文本)。我这样做是为了达到你想要一个非常宽的桌子的极限。这里有更多细节。

Differences between utf8 and latin1

答案 3 :(得分:1)

此问题在Laravel中出现,我使用文本而不是varchar。

答案 4 :(得分:0)

  • 每个表(无论存储引擎如何)的最大行大小为 65,535字节。存储引擎可能会产生其他限制 这个限制,减少了有效的最大行大小。
  • BLOB和TEXT 列数从1到4加上8个字节 行大小限制,因为它们的内容与...分开存储 其余的一行。
  • 详细信息 - Limits on Table Column Count and Row Size

答案 5 :(得分:0)

65535字节是mysql的最大行大小。

对于utf8mb4字符集,varchar(255)表示此列最多使用255 * 4 + 1个字节。因此,这取决于使用什么字符集表。

答案 6 :(得分:0)

我使用了 10.4.17-MariaDB MariaDB 服务器,我通过编辑 MariaDB 服务器配置文件(位于 /etc/my.cnf.d/server.cnf)修复了它,并添加了这两行:

innodb_log_file_size=512M

innodb_strict_mode=0

答案 7 :(得分:-2)

尝试将存储引擎更改为CSV。