列重命名时出现Mysql错误150

Cir*_*rou 5 mysql alter-table character-encoding

我有一个旧的数据库,其中有column'charset到latin1

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

ALTER TABLE `mytable` CHARACTER SET utf8;
Run Code Online (Sandbox Code Playgroud)

和所有列这样:

ALTER TABLE `mytable` CHANGE `mycolumn` `mycolumn` varchar(200) CHARACTER SET utf8;
Run Code Online (Sandbox Code Playgroud)

但在某些列(主键和约束,我猜)我收到此错误:

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

谁知道怎么解决这个问题?

Mak*_*cha 9

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