Ruby on rails Rails重命名\u列迁移问题

Ruby on rails Rails重命名\u列迁移问题,ruby-on-rails,text,migration,blob,rename,Ruby On Rails,Text,Migration,Blob,Rename,我试图在现有数据库上运行迁移,以更改表上的列名。运行迁移时,我收到一个错误,指出Blob/Text字段不能有默认值。所讨论的列是文本列,具有非null属性,但没有默认值 Rails尝试的迁移是: ALTER TABLExxxxx更改abcdabcd文本默认值“”不为空 现在,我没有要求迁移更改列类型,我只是要求它重命名列,那么迁移为什么要尝试对列类型做任何事情呢 我在谷歌上搜索了这个问题,还没有找到解释或解决办法 谢谢你的帮助 Vikram在这个问题上似乎存在一个长期未解决的问题,如下所述:

我试图在现有数据库上运行迁移,以更改表上的列名。运行迁移时,我收到一个错误,指出Blob/Text字段不能有默认值。所讨论的列是文本列,具有非null属性,但没有默认值

Rails尝试的迁移是:

ALTER TABLE
xxxxx
更改
abcd
abcd
文本默认值“”不为空

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

我在谷歌上搜索了这个问题,还没有找到解释或解决办法

谢谢你的帮助


Vikram

在这个问题上似乎存在一个长期未解决的问题,如下所述:

Rails的默认行为是使列为NULL,因为这可以防止在将空白字符串转换回Ruby时出现状态检查等误报。有没有可能通过在mySQL控制台中将文本列重新定义为空值来解决这个问题

编辑

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

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

啊,痛啊!我试图做正确的事情,没有脱离Rails迁移,并正确地记录所有内容,以便其他人可以遵循,并且可以运行rakedb:migrate。这在Rails外部增加了一个额外的步骤。谢谢你指出错误报告。我不知道为什么找不到它。谢谢,是的,使用execute进行手动更新比外部更新要好得多。