11

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

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

这些是我的问题:

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

我理解,这些问题对某些人来说似乎并不重要,但仍然——这是对输入的验证,任何应用程序都需要——而且我认为在这里有点偏执是值得的。

4

1 回答 1

5

这个问题很好,也许对rails/mysql内部有更多了解的人将能够扩展更多。

1)在模型中进行任何验证取决于您希望失败发生在哪里,以防它超过限制。该模型是最佳选择,因为它很可能会覆盖使用该模型的大多数对象。其他替代方法是简单地使用 maxlength 属性限制表单字段。

第一个选项不适用于可选字段。

2)我不知道任何经验法则。使用你知道最长的任何东西,并让它更大一点。

3)我的规则是任何高于 255 的都是文本。你可以在这里找到更多信息

4)如果该列包含相同的内容 - 这可能是有价值的。根据内容类型或用户,某些用例可能具有不同的最大长度。

以上所有内容还受到项目中数据验证要求的严格程度的影响。

于 2012-06-12T01:22:07.300 回答