使用列限制选项值得吗?

Cam*_*ron 2 ruby-on-rails

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

class CreateAccounts < ActiveRecord::Migration
  def self.up
    create_table :accounts do |t|
      t.string :name, :limit => 64
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

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

Sim*_*tti 6

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

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

  1. 跨数据库兼容性
  2. 数据库性能

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

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

  1. SQLIte3将默默修剪该值
  2. MySQL将默默修剪该值
  3. PostgreSQL会引发异常

所以,永远是validates_length_of你的属性.