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) 相比有啥优势吗? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
SQLSERVER中nvarchar和varchar类型的区别是啥?
postgresql 9.2 中 varchar(n) 的最大长度是多少,哪个最好使用 varchar(n) 或 text?