这看起来很直接,但我不确定哪里出了问题。
我正在尝试在我的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
我能想到的唯一问题就是在将列添加到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 ''