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

mysql创建表查询中的行大小太大错误,mysql,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 varc

我正在尝试用下面的查询创建一个表

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

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

表中所有字段的总大小超过限制65535,这就是为什么会出现此错误

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


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

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

问题是innodb表的行大小限制,下面您可以找到一些解决方法:


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


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

  • 每个表(不考虑存储引擎)的最大行大小为 65535字节。存储引擎可能会对 此限制将减少有效的最大行大小
  • BLOB和TEXT 列的计数范围为1到4,每个列加上8个字节 行大小限制,因为它们的内容与 这一排的其余部分
  • 详细资料-

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


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

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

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

    innodb_日志_文件_大小=512M


    innodb_strict_mode=0

    没错,但我得到了这个结构来创建表(实际上这是在MSSQL数据库中创建的表结构之一)。我正试图在MYSQLMSSQL中做同样的事情,因为MYSQLMSSQL没有这个限制。MySQL确实有这个限制。除非更改类型,否则无法在MySQL中创建这样的表。
    表中*all*字段的总大小
    ——并且再次学到了一些新东西。谢谢您还可以使用NVARCHAR,它在运行时根据插入的数据动态分配内存。但在创建表时需要提到最大大小,这并不意味着它分配内存。这在技术上可能可行,但通常不是一个好主意。我永远不想在繁忙的生产服务器上使用CSV存储引擎。