【问题标题】:Too Many Columns in MySQL - error 1117MySQL 中的列太多 - 错误 1117
【发布时间】:2010-01-05 10:08:59
【问题描述】:

我刚刚在 mysql 中的表中添加了一个新字段,它返回“1117:太多列”的警告

表格有 (gasp) 1449 列。我知道,我知道这是一个荒谬的列数,我们正在重构架构,但我需要进一步扩展这个架构。也就是说,根据 mysql 文档,这似乎没有达到 3398 的理论限制。我们也没有接近每行 64K 的限制,因为我们现在在 50K 范围内。

该警告不会阻止我将字段添加到架构中,因此不确定它是如何失败的。鉴于此错误似乎没有引起任何问题,我该如何解释它?

【问题讨论】:

  • 设计它的人是否将列误认为行,并不断添加前者?现在就重构这个烂摊子。不要“多一点”扩展它。
  • 100 列 = (喘气)。 1000 列 = 修复它!
  • too many columns的哪一部分你不明白? :-)
  • OMFG,至少有 1400 只小猫死亡
  • 这是thedailywtf的候选人。

标签: mysql


【解决方案1】:

也许其中一些因素会增加总字节数:

http://dev.mysql.com/doc/refman/5.5/en/column-count-limit.html

例如,如果一列允许空值,则添加到总数中,或者如果使用 unicode,则字符列所需的空间增加三倍以上,等等...

对于 MyISAM:

row length =
  1 +
  (sum of column lengths) +
  (number of NULL columns + delete_flag + 7)/8 +
  (number of variable-length columns)

您可以检查它是否确实是行大小问题或列数问题,方法是仅添加一个 tinyint 非空列,然后删除该列并添加一个 char(x) 列,直到出现错误。

【讨论】:

    【解决方案2】:

    警告正是:警告。这意味着你现在还好,但如果你继续引发警告的行为,你以一种或另一种形式受到惩罚(我只是想把这个概念传达给我的目前是三岁的女儿,如果看起来有点简单,请原谅我。

    这是 MySQL 的礼貌。如果您继续沿着这条特定的道路前进,那么下一步就是拒绝合作(可能的)或彻底丢失您的数据(不太可能,但以一种黑色幽默的方式业力),这两者都不是您想要的。

    正确的反应是听它告诉你什么。如果您在考虑重构的最佳方法时想要快速修复,您可以使用公共标识符将行拆分到两个表中。

    这将使您的查询(暂时)变得丑陋,但至少会停止警告。但不要将此作为最终解决方案。我发现很难想象一个项目会有数千个无法组织成更好层次结构的属性。

    【讨论】:

      猜你喜欢
      • 2014-08-10
      • 1970-01-01
      • 2010-12-31
      • 2010-11-15
      • 2017-10-29
      • 2015-03-01
      • 2015-03-24
      • 2013-05-07
      • 2017-10-30
      相关资源
      最近更新 更多