VARCHAR(n) 与 VARCHAR(2^n) 相比有啥优势吗? [复制]

Posted

技术标签:

【中文标题】VARCHAR(n) 与 VARCHAR(2^n) 相比有啥优势吗? [复制]【英文标题】: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,而是研究数据类型并选择适合所存储数据类型的大小合适 - 例如如果有适用于数据类型的法律或标准,请选择与标准相符的大小。 ***.com/q/8295131/330315 【参考方案1】:

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

【讨论】:

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

以上是关于VARCHAR(n) 与 VARCHAR(2^n) 相比有啥优势吗? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

varchar和nvarchar区别

SQLSERVER中nvarchar和varchar类型的区别是啥?

postgresql 9.2 中 varchar(n) 的最大长度是多少,哪个最好使用 varchar(n) 或 text?

mysql与oracle 长度区别

varchar(n)

<转> MySQL中采用类型varchar(20)和varchar(255)对性能上的影响