相关疑难解决方法(0)

错误代码 1117 列太多;MySQL 对表的列限制

我有一个包含 1699 列的表,当我尝试插入更多列时,我得到了,

错误代码:1117。列太多

在这个表中,我只有 1000 行。对我来说,最重要的是列数。桌子上有什么限制吗?我想创建 2000 列。那可能吗?

mysql table

39
推荐指数
5
解决办法
7万
查看次数

InnoDB 创建表错误:“行大小太大”

为了生成报告,我们有一些工程师将规范化的数据库结构展平到临时表中。列被指定为TEXT NOT NULL(我知道“他们为什么这样做?”;让我们假设我们正在解决这个问题)。

我们在 Linux 上使用 MySQL 5.1.48 Community RHEL5 和 InnoDB 插件 1.0.9。

使用 MyISAM 时,我们从未遇到过最大列数或最大行长度的表大小限制(在调查期间,我们已达到最大列数限制为 2598(第 2599 个导致错误 1117)。使用 InnoDB 我们达到了限制。这些限制在创建表(无数据插入)为:

第 1 行的错误 1118 (42000):行大小太大。所用表类型的最大行大小(不包括 BLOB)为 8126。您必须将某些列更改为 TEXT 或 BLOB

我正在寻找以下问题的答案:

  1. 使用大量 v/v/b/t 列时确定行大小的详细公式是什么?我已经尝试了一些不同的公式,使用varchar(N)列(其中 N 介于 1 和 512 之间)、UTF8 字符集 (*3) 以及表将采用的列数,直到失败。我尝试过的所有组合都没有给出与实际测试结果相匹配的值。

  2. 在计算行大小时,我还必须考虑哪些其他“开销”?

  3. 当我从使用 varchar(109) 列创建表到 varchar(110) 列时,为什么错误消息从 8126 更改为 65535?

mysql innodb

12
推荐指数
1
解决办法
4万
查看次数

行大小太大 (> 8126)

我面临以下问题。

Row size too large (> 8126). Changing some columns to TEXT or BLOB or using ROW_FORMAT=DYNAMIC or ROW_FORMAT=COMPRESSED may help. In
Run Code Online (Sandbox Code Playgroud)

当前行格式,768 字节的 BLOB 前缀内联存储。

它出现在我将图像上传到数据库时(它具有 <1Mb)。准确地说,只有 100kb。

我尝试了很多事情:更改属性“max_allowed_pa​​cket”、“innodb_log_file_size”(即,将大小增加到 512M)并没有什么......

我不知道麻烦的原因。

为了说明,表

TABLE(
    `passeio` int(4) unsigned NOT NULL COMMENT 'identitificador do passeio',
      `data_inclusao` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
      `nome_passeio` varchar(200) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
      `inicio` date NOT NULL,
      `fim` date NOT NULL,
      `por_que_ir` text CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
      `pdf_roteiro` mediumblob NOT NULL,
      `incluso` …
Run Code Online (Sandbox Code Playgroud)

mysql innodb blob

7
推荐指数
1
解决办法
7万
查看次数

在 MySQL 5.7 中保留行大小 &gt; 8126 的表有什么风险?

我刚刚从 MySQL 5.6 升级到 5.7,并且意外地发现一个 WordPress 插件表包含一个荒谬的 438 个字段,并且超过了 8126 字节的行大小限制。

这是我在运行时收到的警告mysql_upgrade

行大小太大 (> 8126)。将某些列更改为 TEXT 或 BLOB 或使用 ROW_FORMAT=DYNAMIC 或 ROW_FORMAT=COMPRESSED 可能会有所帮助。在当前行格式中,内联存储 768 字节的 BLOB 前缀。

不过,这只是一个警告,桌子还在那里。我无法创建具有相同结构的新表,但有趣的是,我可以保留旧表并使用它(至少,SELECT从它)。

我已经阅读了RolandoMySQLDBABill Karwin对类似主题回答,但没有任何解决方案可以帮助我:

  • 更改ROW_FORMAT=DYNAMIC为还不够,因为该表充满了内联 UTF-8VARCHAR字段,这些字段仅超过最大大小
  • 修改表的结构是不可能的,因为它是第三方软件的一部分,这就像打开一罐蠕虫

我已经向插件开发人员报告了这个错误,并希望他们能尽快修复该表,但与此同时,我被这个非法表困住了。

所以问题是:

  • 当 MySQL 不允许创建这样的表时,它如何处理不遵守 InnoDB 存储规则的表?
  • 将桌子保持在当前状态是否有任何风险?
  • 我可以在此表上运行的查询类型是否有限制?
  • 如果我将此服务器复制到另一台 MySQL 5.7 服务器,复制是否会因为此表而失败?

我从 MySQL 5.6 升级。我也尝试DYNAMICCOMPRESSED格式,但没有运气。我计算了 integer + varchar 字段的大小,它们总共有 17,059 个字节,所以我没有机会以这种方式成功。

该插件名为Photo …

mysql innodb mysql-5.7

6
推荐指数
1
解决办法
2329
查看次数

标签 统计

mysql ×4

innodb ×3

blob ×1

mysql-5.7 ×1

table ×1