更新列以减少字符串限制

时间:2016-06-28 15:16:15

标签: ruby-on-rails rails-migrations mysql2

我正在尝试更新数据库中的字段以减少字符串的字符限制。旧的迁移看起来像这样:

class AddNoSaleLabelToCompany < ActiveRecord::Migration
  def change
    add_column :companies, :no_sale_label, :string, :limit => 18, :default => "NO SALE"
  end
end

我创建了一个新的迁移,如下所示:

class UpdateNoSaleLabelLimit < ActiveRecord::Migration
  def up
    change_column :companies, :no_sale_label, :string, :limit => 17, :default => "NO SALE"
  end

  def down
    change_column :companies, :no_sale_label, :string, :limit => 18, :default => "NO SALE"
  end
end

当我运行迁移时,BOMBS和我收到错误:

StandardError: An error has occurred, all later migrations canceled:

Mysql2::Error: Data truncated for column 'no_sale_label' at row 1: ALTER TABLE `companies` CHANGE `no_sale_label` `no_sale_label` var
char(17) DEFAULT 'NO SALE'

我不确定为什么会这样,有什么指针?

1 个答案:

答案 0 :(得分:0)

我这样做是作为评论但是我还不允许 - 所以第1行的no_sale_label列中的数据是什么,具体来说,它是18个字符。如果是这样,我建议使用快速UPDATE语句,以便将所有现有值减少到不超过17。