以下内容是否正确?
change_column :tablename, :fieldname, :limit => null
以下内容是否正确?
change_column :tablename, :fieldname, :limit => null
change_column :users, :column, :string, :limit => 255
字符串列的标准长度为255,Rails将会忽略你之前指定的限制。
更新:
虽然这在许多Rails版本中可以使用,但是最好像Giuseppe的答案一样使用nil
。
change_column :users, :column, :string, :limit => nil
这意味着你唯一做错的事情是使用了null
而不是nil
。
以下是我的经历。
我意识到一个表中的字符串字段无法容纳其内容,因此我生成了一个包含以下内容的迁移:
def self.up
change_column :articles, :author_list, :text
end
运行迁移后,数据库模式发生了以下变化:
create_table "articles", :force => true do |t|
t.string "title"
t.text "author_list", :limit => 255
end
原来的方法不可行。因此,我按照以下方式重新执行了迁移:
def self.up
# careful, it's "nil", not "null"
change_column :articles, :author_list, :text, :limit => nil
end
这次,在schema.rb中限制已经消失了:
create_table "articles", :force => true do |t|
t.string "title"
t.text "author_list"
end
:text
。它没有限制。change_column :tablename, :fieldname, :text, :limit => nil
add_column :tablename, :fieldname_tmp, :text
Tablename.reset_column_information
Tablename.update_all("fieldname_tmp = fieldname")
remove_column :tablename, :fieldname
rename_column :tablename, :fieldname_tmp, :fieldname
字符串没有限制并不是大多数数据库支持的功能:您必须在 varchar(SIZE)
定义中指定大小。
虽然您可以尝试,但我个人会选择 :limit => BIG_ENOUGH_NUMBER
。您还可以考虑使用 CLOB 类型处理非常大的文本。