【问题标题】:Rails rename_column migration issueRails rename_column 迁移问题
【发布时间】:2010-11-01 09:01:10
【问题描述】:

我正在尝试在现有数据库上运行迁移以更改表上的列名。运行迁移时,我收到一条错误消息,指出 Blob/Text 字段不能具有默认值。有问题的列是文本列,具有非空属性,但没有默认值。

Rails 尝试的迁移是:

ALTER TABLE xxxxx CHANGE abcd ABCD text DEFAULT '' NOT NULL

现在,我没有要求迁移更改列类型,我只是要求它重命名列,那么迁移为什么要对列类型做任何事情?

我已在 Google 上搜索过该问题,但尚未提出解释或解决方法。

任何帮助表示赞赏。

维克拉姆

【问题讨论】:

    标签: ruby-on-rails text migration blob rename


    【解决方案1】:

    在此问题上似乎确实存在长期未解决的问题,如下所述:

    rails bug report

    Rails 的默认行为是将列设置为 NULL,因为这可以防止在将空白字符串转换回 Ruby 时出现误报等情况。您是否有机会通过在 mySQL 控制台中重新定义文本列以使用 NULL 值来解决此问题?

    编辑

    您可以在迁移文件中执行此操作,这不是 Rails 的方式,但它比向每个人发送电子邮件以更改其本地副本要好得多:

    MyModel.connection.execute "ALTER TABLE xxxxx CHANGE abcd ABCD text DEFAULT NULL"
    

    【讨论】:

    • 啊,好痛!我试图通过不退出 Rails 迁移并正确记录所有内容来做正确的事情,以便其他人可以跟随,并且可以运行 rake db:migrate。这在 Rails 之外增加了一个额外的步骤。感谢您指出错误报告。我不知道为什么我没有找到它。
    • 谢谢,是的,使用执行手动更新比外部更新要好得多。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-30
    • 2015-08-03
    • 2016-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多