我只想把这个案子
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
这更能说明这一整理。