【问题标题】:Is there any advantage to VARCHAR(n) vs. VARCHAR(2^n)? [duplicate]VARCHAR(n) 与 VARCHAR(2^n) 相比有什么优势吗? [复制]
【发布时间】:2018-08-06 02:34:49
【问题描述】:

我看到一些开发人员将字段设置为VARCHAR(50) / VARCHAR(100),而其他开发人员将字段设置为VARCHAR(64) / VARCHAR(128) / VARCHAR(256)

除了个人喜好之外,在创建VARCHAR 字段与整数时,是否有任何理由使用 2^n 数字来指定字段长度,假设两个字段长度都可以支持传入的数据?

【问题讨论】:

  • 许多计算机类型确实会想到,例如128 或 256 作为“整数”
  • 这是程序员的迷信,认为使用 2 的幂可能在内存或磁盘中对齐得更好。这不是真的,但大多数人还是这样做了。
  • 它更符合计算机架构的字长,因此它可能会稍微提高效率/以相同的计算成本存储更多数据。
  • 理想情况下,您既不选择10n 也不选择2^n,而是研究数据类型并选择适合所存储数据类型的大小合适 - 例如如果有适用于数据类型的法律或标准,请选择与标准相符的大小。

标签: sql sql-server varchar


【解决方案1】:

没有优劣之分,数字只是定义了存储字符串的最大长度。

【讨论】:

  • 我不同意没有劣势。列的长度是一个隐式约束。通过四舍五入,您可以放松可能对数据完整性产生影响的约束。以一个定义为保存美国邮政编码的列为例。由于它可以是 5 个或 10 个字符,因此 varchar(10) 是有意义的。但是,如果你“四舍五入”到最接近的 2 次方,你会得到一个 varchar(16)。现在您可以添加任何内容,包括 16 个字符的数据。任何介于 11 到 16 个字符之间的字符都是无效的,应该完全拒绝进入数据库。
  • Ben,你当然是对的,如果你知道列的长度应该是多少,那么设置一个合理的最大长度是有意义的。然而,这篇文章正在询问例如VARCHAR(100) vs VARCHAR(128) 所以假设这些列设置为“安全”长度以防止截断错误等是相对安全的。
猜你喜欢
  • 2011-01-01
  • 2010-12-12
  • 2021-02-27
  • 2011-10-27
  • 1970-01-01
  • 2015-07-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多