解决MySQL创建外键时ERROR 1005, errorno:150的错误

由于项目中的有数据结构的变更,今天在执行DDL的时候创建外键死活不成功,老是报ERROR 1005 (HY000): Can't create table '.\env_abc\#sql-958_7.sql' (errno: 150),根本就没有这个sql嘛。


网上搜索结果:
在MySQL Manual里找到“errno 150”,要看错误的详细提示,可以使用命令

SHOW ENGINE INNODB STATUS;     //针对用INNODB存储方式的数据库,

在信息中有一组【LATEST FOREIGN KEY ERROR】会有最近错误的详细描述和解决办法。
如:Cannot find an index in the referenced table where the referenced columns appear as the first columns, or column types in the table and the referenced table do not match for constraint.(不能在“被reference的表”里找到包含“被reference字段”的索引,或者是两个关联字段类型不匹配)


但是发现自己的sql两边的结构都是一样的,经过死命折腾,终于找到原因了:

由于现在的库要区分大小写,数据库设置了字符集utf8和校验字符集utf8_bin,但是执行的DDL是从PDM中拷贝过来的,没有带字符集设置(ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin),所以mysql识别出两边的字段类型不匹配,后来把执行的DDL加上ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin,重新执行下就可以了。

阅读更多
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页