MySQL 查询适用于备份数据库,但不适用于原始数据库,其中失败并显示 errno:150



我在机器(OS X 10.13.6(上导入MySQL数据库的备份,然后运行以下脚本:

ALTER TABLE user_activity_data
ADD FOREIGN KEY (article_id) REFERENCES Article(id);

一切都很好:添加了外键。

我在原始机器(Debian GNU/Linux 8 (jessie((上运行相同的脚本,脚本失败并显示错误消息:

errno: 150

两列的类型完全相同: int(11(

这怎么可能?这是一个备份,所以它是同一个数据库。确实,这是MySQL的两个不同版本...但它们显然应该是兼容的。


这是脚本失败的MySQL版本:

+-----------------+
| 5.5.60-0+deb8u1 |
+-----------------+

以及它成功的版本:

+-----------+
| 5.7.22    |
+-----------+

您可能需要确保外键与主键的类型完全相同。

MySQL 5.5可能更宽容一些,而MySQL 5.7则更严格一些。请考虑在两者上使用相同的版本。

啊哈!找到了,但很讨厌:(

看来,

  • 在 Debian 上,表名区分大小写,而在 OS X 上则不区分大小写。

因此,问题在于REFERENCES条款的客体应该是article(id)而不是Article(id)

最新更新