使用列限制选项值得吗?

时间:2009-12-10 13:03:57

标签: ruby-on-rails

是否有必要在迁移中为字符串指定限制选项...

class CreateAccounts < ActiveRecord::Migration
  def self.up
    create_table :accounts do |t|
      t.string :name, :limit => 64
    end
  end
end

这应该应用于DB中的所有字符串吗?有什么意义?

2 个答案:

答案 0 :(得分:6)

字符串通常长度为255个字符,但并非所有数据库都以相同的方式处理字符串字段。例如,PostgreSQL可以创建不同大小的字符串列。

至少有两个很好的理由来指定字符串字段的值:

  1. 跨数据库兼容性
  2. 数据库性能
  3. 如果您需要一个字符串列来存储2个chr长度的国家/地区代码,为什么您希望数据库为......什么都不保留额外的253个字符?

    另请注意,您应始终验证模型中字段值的长度。 如果您尝试创建名称超过最大长度的记录:

    1. SQLIte3将默默修剪值
    2. MySQL将默默修剪值
    3. PostgreSQL会引发异常
    4. 因此,始终validates_length_of您的属性。

答案 1 :(得分:0)

首先想到的是 - 当你有数百万个帐户时,这个限制实际上会影响你的数据库的大小。