社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
私信  •  关注

CoderBapu

CoderBapu 最近创建的主题
CoderBapu 最近回复了
6 年前
回复了 CoderBapu 创建的主题 » mysql-错误1215:无法添加外键约束[重复]

我只想把这个案子 VARCHAR 外键关系。上周我在mysql workbench 8.0中试图解决这个问题,最终修复了这个错误。

简短回答: 架构、表、列、引用表、引用列和引用父表的任何其他表的字符集和排序规则必须匹配。

长答案: 我的表中有一个枚举数据类型。我把这个改成了 瓦查尔 我可以从引用表中获取值,这样就不必修改父表来添加其他选项。这段外键关系看起来很简单,但我犯了1215个错误。 arvind 的答案和以下内容 link 建议使用

SHOW ENGINE INNODB STATUS;

在使用这个命令时,我得到了错误的以下详细描述,没有其他有用的信息

在引用的表中找不到 引用列显示为第一列或列类型 在表中与引用的表不匹配。 注意,枚举和集合的内部存储类型在 使用>=innodb-4.1.12创建的表,以及旧表中的此类列 不能被新表中的此类列引用。 请参考 http://dev.mysql.com/doc/refman/8.0/en/innodb-foreign-key-constraints.html 正确的外键定义。

之后我用 SET FOREIGN_KEY_CHECKS=0; 由建议 Arvind Bharadwaj 以及链接 here :

这将显示以下错误消息:

错误代码:1822。未能添加外键约束。失踪 约束索引

在这一点上,我对模式进行了“逆向工程”,并且能够在eer图中建立外键关系。在“前进工程师”中,我得到了以下错误:

错误1452:无法添加或更新子行:外键约束 失败

当我将eer图“转发”到一个新模式时,sql脚本运行时没有问题。在比较转发工程师尝试生成的sql时,我发现不同之处在于字符集和排序规则。父表、子表和这两列 utf8mb4 字符集和 utf8mb4_0900_ai_ci 但是,排序规则使用 CHARACTER SET = utf8 , COLLATE = utf8_bin ; 换一张桌子。

对于整个架构,我将所有表和列的字符集和排序规则更改为以下内容:

CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci;

这最终以1215个错误解决了我的问题。

旁注: 校勘 utf8mb4_general_ci 在mysql workbench 5.0或更高版本中工作。校勘 utf8mb4_0900_艾_ci 仅适用于MySQL Workbench 8.0或更高版本。我认为字符集和排序规则有问题的原因之一是MySQL Workbench升级到8.0。这是一个 link 这更能说明这一整理。