mysql查询可以在备份数据库上工作,但不能在原始数据库上工作,因为它失败了,错误号为:150

5lwkijsr  于 2021-06-20  发布在  Mysql
关注(0)|答案(2)|浏览(245)

我在我的机器(os x 10.13.6)上导入mysql db的备份,并运行以下脚本:

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    |
+-----------+
flseospp

flseospp1#

啊哈!找到了,但很难看:(
看来,
在debian上,表名区分大小写,而在osx上则不区分大小写。
因此,问题在于 REFERENCES 条款应该是 article(id) 而不是 Article(id) .

62lalag4

62lalag42#

您可能需要确保外键与主键的类型完全相同。
MySQL5.5可能更宽容一些,而MySQL5.7则更严格一些。考虑在这两个服务器上使用相同的版本。

相关问题