我们应该验证字符串字段的最大长度吗?
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 但是如果我删除第一个参数我认为这不好..这只是我的猜测..如果我错了你可以告诉我.. :)以上是关于我们应该验证字符串字段的最大长度吗?的主要内容,如果未能解决你的问题,请参考以下文章