我正在尝试在现有数据库上运行迁移,以更改表上的列名。当我运行迁移时,我会遇到一个错误,说明BLOB/文本字段不能具有默认值。所讨论的列是一个文本列,具有非NULL属性,但没有默认值。

铁轨尝试的迁移是:

Alter表 xxxxx 改变 abcd ABCD 文本默认''不是null

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

我已经搜索了这个问题,但没有提出解释或解决方法。

任何帮助都赞赏。

维克拉姆

有帮助吗?

解决方案

如下所述,似乎确实有一张长期未解决的票证:

铁路错误报告

Rails的默认行为是制造无效的列,因为在将空白字符串转换回Ruby时,这会防止在存在检查等上进行误报。您可以通过重新定义文本列以在MySQL控制台中使用零值来解决这个问题吗?

编辑

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

MyModel.connection.execute "ALTER TABLE xxxxx CHANGE abcd ABCD text DEFAULT NULL"
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top