我们应该验证字符串字段的最大长度吗?

Posted

技术标签:

【中文标题】我们应该验证字符串字段的最大长度吗?【英文标题】:Should we validate max length on string fields? 【发布时间】:2019-04-25 14:50:38 【问题描述】:

我们在应用程序中进行了验证,将用户的名字和姓氏长度限制为 255 个字符。我们应该这样做有什么技术原因吗?我想知道是否存在任何安全问题或我们不限制字符串长度的风险。我们正在使用 Postgres text 列。

【问题讨论】:

如果这是一个业务约束,那么是的,您也应该在数据库约束中反映这一点。如果您正在索引列,您可能也应该限制长度。请注意,定义为 varchar(255) 的列对定义为 varchar(260)varchar(301) 的列没有任何优化 - 255 是一个剩余的“幻数”,确实会对性能产生任何影响 相关:***.com/questions/8295131 【参考方案1】:

Text = 可变无限长度.. 如果你放了限制器为什么不使用varchar(255)

出于安全考虑和性能限制器是好的。如果您的数据库文件很重,并且如果有人向您的text 发送垃圾邮件,则数据类型超过 8 KB。这会使您的数据库变得很重,最坏的情况是 Break Down..

编辑

正如Documentation 所说:

如果您希望存储没有特定上限的长字符串,请使用 没有长度说明符的文本或字符变化,而不是 构成任意长度限制。

回到你原来的问题“我们应该验证字符串字段的最大长度”吗?

当看到文档说.. 最好是 Varchar(255) 而不是 Varchar 没有长度说明符并在应用程序端做限制器

对于性能而言:

系统会自动压缩长字符串,所以 对磁盘的物理要求可能会更少。很长的值也是 存储在后台表中,这样它们就不会干扰快速 访问较短的列值。

我会说 Postgresql 很棒:)

【讨论】:

PostgreSQL 文档实际上建议 text 的性能并不逊色,但是,如果您需要可变长度的东西,并且可能会更好,因为它们不需要在存储值之前检查长度。请参阅此处的提示:postgresql.org/docs/10/datatype-character.html @lobati 是的.. 我已经读过.. 关于性能很棒的postgresql.. 并说If you desire to store long strings with no specific upper limit, use text or character varying without a length specifier, rather than making up an arbitrary length limit... 我看不出您如何通过提供长字符串来“分解”数据库。 是的..我想删除那个@a_horse_with_no_name 但是如果我删除第一个参数我认为这不好..这只是我的猜测..如果我错了你可以告诉我.. :)

以上是关于我们应该验证字符串字段的最大长度吗?的主要内容,如果未能解决你的问题,请参考以下文章

李老师 mongoDB中 字符类型的字段 有大小长度限制吗

Rails:验证字符串的最小和最大长度,但允许它为空

MYSQL各字段的长度是多少

mysql字段类型

extjs3 网格单元最大长度输入验证

Mysql varchar字段长度越大越好吗?