我在我的机器(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 |
+-----------+
2条答案
按热度按时间flseospp1#
啊哈!找到了,但很难看:(
看来,
在debian上,表名区分大小写,而在osx上则不区分大小写。
因此,问题在于
REFERENCES
条款应该是article(id)
而不是Article(id)
.62lalag42#
您可能需要确保外键与主键的类型完全相同。
MySQL5.5可能更宽容一些,而MySQL5.7则更严格一些。考虑在这两个服务器上使用相同的版本。