Rails ActiveRecord 验证:字符串的最大长度是多少?

12

我在我的数据库迁移文件中有这些字符串/文本字段:

  t.string :author
  t.string :title
  t.string :summary
  t.text :content
  t.string :link

以下是我的问题:

  1. 每个字符串/文本属性都应该有最大长度验证,目的是确保安全性(如果您不想接收几 MB 的文本输入)和数据库性能(如果字符串= varchar,则 MySQL 有 255 字符限制)。这是正确的吗?是否有任何理由不为数据库中的每个字符串/文本属性设置最大长度验证?
  2. 如果我只关心作者和标题的长度不超过可以存储的字符串长度,那么我是否应该为它们中的每一个设置最大长度为 255?
  3. 如果 URL 的最大可能长度约为 2000 个字符,将链接作为字符串而不是文本进行存储是否安全?如果我已经使用正则表达式对其格式进行验证,是否应该验证链接属性的最大长度?
  4. 是否应该为内容(文本)属性设置最大长度,仅保护数据库免受无限长度的输入?例如,将文本字段的最大长度设置为 100,000 个字符是否合理,还是完全没有意义且效率低下?

我知道,这些问题可能对一些人来说似乎不重要,但这是任何应用程序所需的输入验证,我认为在这里变得相当偏执是值得的。

1个回答

5
问题很好,也许对于更了解rails/mysql内部的人来说,他们能够更深入地扩展。
1)在模型中进行任何验证取决于您希望在超过限制的情况下在哪里发生故障。模型是最好的选择,因为它很可能涵盖使用模型的大多数对象。另一种选择是仅使用maxlength属性限制表单字段。
第一个选项不适用于可选字段。
2)我不知道有什么经验法则。使用您知道的最长的并使其稍微变大。
3)我的规则是255以上的任何内容都是文本。您可以在此处找到更多信息。
4)如果列包含相同的内容-可能有价值。某些用例可能会根据内容类型或用户而具有不同的maxlength。
上述所有内容也受项目中数据验证要求的严格程度的影响。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接