【问题标题】:What's the point in setting max size for varchar() in mysql? [duplicate]在 mysql 中为 varchar() 设置最大大小有什么意义? [复制]
【发布时间】:2017-07-18 10:37:51
【问题描述】:

我读到"If you put a greater value than 255 it will be converted to a TEXT type",那么设置最大尺寸有什么意义?

【问题讨论】:

  • 并非总是需要 VarChar 才能达到 255。例如,密码的 varchar 是 6 位,我会将其设置为 6,因此如果用户尝试解析到我的数据库,它将引发错误。
  • 所以只有设置为255时,如果超过该限制,它会被转换为TEXT;否则抛出错误?
  • 这种错误信息是我们建议避免 w3fools的原因。 (问题不仅仅是错误信息。真正的问题是 w3fools 顽固地拒绝纠正这种错误陈述。)VARCHAR( n) 在 n>255 时转换为 TEXT。 (该语句对于 MySQL 5.1、5.6 和 5.7 来说是 FALSE。如果它曾经是真的(?)那将是对于一个非常旧的 MySQL 版本。) VARCHAR 和 TEXT 之间存在一些显着差异。还有一些你会使用其中一个的充分理由。超过 255 个字符不是一个很好的理由。

标签: mysql sql


【解决方案1】:

您指定最大长度的一个原因是索引,即使 VARCHAR“可能”最多 255 (or more) 个字符。您想告诉数据库真正使用了多少字符,以便索引可以高效并适合存储引擎的能力。索引中可以包含多少数据是有限制的(请参阅MyISAMInnoDB

如果您要问,“为什么不到处使用 TEXT”?嗯,它的存储效率不高,不能在索引中使用,它也可以有不同的检索特性。

另见Difference between VARCHAR and TEXT in mysql

【讨论】:

    【解决方案2】:

    这些信息已经过时了 10 年。我无法链接该手册,因为 Oracle 已从他们的网站上删除了旧版本,但引用是:

    在 MySQL 5.0.3 之前,具有长度规范的 VARCHAR 列 大于 255 被转换为最小的 TEXT 类型 保存给定长度的值。例如,VARCHAR(500) 是 转换为 TEXT,而 VARCHAR(200000) 转换为 MEDIUMTEXT。 这是一个兼容性功能。但是,这种转换影响了 删除尾随空格。

    显然,VARCHAR 在 MySQL/3.23 之前不接受大于 255 的大小。他们认为这将是保持向后兼容性的好方法,后来他们又撤销了这个决定。

    【讨论】:

    • 十多年前 MySQL 5.0 发布了什么?
    • @spencer7593 可能更多。我保留了我在 2007 年 10 月下载的 CHM 格式的文档的本地副本;-)
    【解决方案3】:

    并非总是需要 VarChar 才能达到 255。例如,密码的 varchar 是 6 位,而不是我将其设置为 6,因此如果用户尝试解析到我的数据库,它将引发错误。当您期待消息或您没有限制的任何内容时,您可以将其设置为 255!

    @Paul 也提到了内存!记忆和检索特性也会有所不同。

    是的,如果文本超过 255,它会抛出错误!

    【讨论】:

      猜你喜欢
      • 2015-07-02
      • 2023-03-08
      • 2015-06-30
      • 2012-11-10
      • 1970-01-01
      • 2011-10-30
      • 1970-01-01
      • 2016-03-11
      • 2015-08-08
      相关资源
      最近更新 更多