これはかなり簡単に思えますが、何が間違っているのかわかりません。
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 に追加した直後にこの change_column が発生し、最初にタイプ :string からタイプ :text に変更しなければならなかったことです。これらはそれぞれ独自の移行スクリプトに由来し、次のようになります。
add_column :foo, :bar, :string, :null => false
と
change_column :foo, :bar, :text
実験として、最初の change_column (change_column :foo, :bar, :text) を変更してみましたが、これによりテーブルが正常に変更されることがわかりました。残念ながら、以前の移行を変更することはできず、現在の実装では新しい移行しか追加できないため、本番環境では機能しません。問題は、列を 1 回変更できるのに 2 回変更できないのはなぜですか?
更新最初の提案を試しましたが、次の結果が得られました。
Mysql::Error: BLOB/TEXT column 'bar' can't have a default value: ALTER TABLE `foo` CHANGE `bar` `bar` text(16777215) DEFAULT ''