首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL查询在备份DB上工作,但在与errno: 150一起失败的原始数据库上不起作用。

问MySQL查询在备份DB上工作,但在与errno: 150一起失败的原始数据库上不起作用。
EN

Stack Overflow用户
提问于 2018-08-14 11:56:07
回答 2查看 27关注 0票数 1

我在我的计算机(OSX10.13.6)上导入MySQL DB的备份,并运行以下脚本:

代码语言:javascript
复制
ALTER TABLE user_activity_data
ADD FOREIGN KEY (article_id) REFERENCES Article(id);

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

我在原始机器(Debian /Linux8 (jessie))上运行相同的脚本,该脚本在错误消息中失败:

代码语言:javascript
复制
errno: 150

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

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

这是脚本失败的MySQL版本:

代码语言:javascript
复制
+-----------------+
| 5.5.60-0+deb8u1 |
+-----------------+

以及它成功的版本:

代码语言:javascript
复制
+-----------+
| 5.7.22    |
+-----------+
EN

回答 2

Stack Overflow用户

发布于 2018-08-14 12:14:13

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

MySQL 5.5可能更宽容一些,而MySQL 5.7则更严格一些。考虑在这两种情况下使用相同的版本。

票数 1
EN

Stack Overflow用户

发布于 2018-08-14 15:13:18

啊哈!找到了,但很下流

看来,

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

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51840856

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档