这看起来很简单,但我不确定出了什么问题。
我试图在我的 Rails 迁移中执行以下操作:
change_column :foo, :bar, :text, :limit => 16777215
我收到以下错误
Mysql::Error: BLOB/TEXT column 'bar' can't have a default value: ALTER TABLE `foo` CHANGE `bar` `email_contents` text(16777215) DEFAULT '' NOT NULL
我唯一能想到的是导致一个问题,这个 change_column 在我将列添加到 foo 后不久发生,并且必须首先将其从 type :string 更改为 type :text 。这些每个都来自自己的迁移脚本,如下所示:
add_column :foo, :bar, :string, :null => false
和
change_column :foo, :bar, :text
作为一个实验,我尝试更改第一个 change_column (change_column :foo, :bar, :text) 并发现这成功地改变了表格。不幸的是,我无法更改之前的任何一个迁移,只能在我们当前的实现中添加新的迁移,因此这在生产中不起作用。问题是,什么允许我更改列一次而不是两次?
更新尝试了第一个建议,但得到以下结果:
Mysql::Error: BLOB/TEXT column 'bar' can't have a default value: ALTER TABLE `foo` CHANGE `bar` `bar` text(16777215) DEFAULT ''