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

时间:2018-08-14 11:56:07

标签: mysql

我将MySQL数据库的备份导入到我的机器上(OS X 10.13.6),并运行以下脚本:

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 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:1)

哦!找到了,但是很讨厌:(

看来,

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

因此,问题在于REFERENCES子句的对象应该是article(id)而不是Article(id)