【问题标题】:Mysql error 150 on column rename列重命名时出现Mysql错误150
【发布时间】:2012-10-01 12:50:26
【问题描述】:

我有一个旧数据库,其列字符集为 latin1

现在我正在尝试更改 utf8 中的整个数据库,我制作了一个脚本来更改 utf8 中的所有表,如下所示:

ALTER TABLE `mytable` CHARACTER SET utf8;

所有的列都是这样的:

ALTER TABLE `mytable` CHANGE `mycolumn` `mycolumn` varchar(200) CHARACTER SET utf8;

但在某些列上(我猜是主键和约束)我收到了这个错误:

Error on rename of './test/#sql-5028_217b96' to './test/mytable' (errno: 150)

有人知道如何解决这个问题吗?

【问题讨论】:

    标签: mysql character-encoding alter-table


    【解决方案1】:

    您的mycolumn 很可能是外键的一部分。如果是这样,您必须删除约束,然后更改主键/外键的类型,然后再次添加约束。

    【讨论】:

    • 我刚刚遇到了一个类似的问题(从INT 到BIGINT)。我决定复制表(它对我需要更改的列有外键约束)及其内容,毫无问题地更改重复表中的列类型,然后用重复表替换原始表。这样做有危险吗?
    • @tylerl 否,如果原始表上的数据在您更改期间保持不变。否则,您可能会丢失数据/不一致。
    • 是的,我相信它破坏了我的应用程序中的东西......当表被复制时,一定没有正确复制(我在 Mac 上使用 Sequel Pro)?我认为没有丢失任何数据,但突然间我的服务器不想再将数据保存到特定表了!奇怪...问题是我已经注意到有问题的字段是特定表中的外键,但我找不到 FK 约束!呜呜呜……
    • 有人知道有什么工具可以自动完成这个吗?对于正在重构的大型数据库,手动执行这些操作是很疯狂的。
    猜你喜欢
    • 1970-01-01
    • 2013-11-09
    • 1970-01-01
    • 2016-03-07
    • 1970-01-01
    • 2011-04-24
    • 1970-01-01
    • 2011-04-29
    • 2011-05-04
    相关资源
    最近更新 更多