记一次mysql坑爹的外键排坑经历

起因

事情是这样的,我在用jpa的orm反向映射数据库生成表时,遇到了其中一个外键无法生成的情况,不管是数据库直接执行命令还是navicat界面添加外键都失败了。

以下是我的表结构:

要生成外键的表

记一次mysql坑爹的外键排坑经历

关联表1:

记一次mysql坑爹的外键排坑经历

关联表2:

记一次mysql坑爹的外键排坑经历

 

经过

启动的时候发现device_id字段无法建立外键,但是group_id却可以,但是从实体类上我实在看不出什么问题,于是我在数据库中执行sql,发现报错:报错代码是1215

记一次mysql坑爹的外键排坑经历

我在百度搜索这个错误原因,大多数都是说当前表和关联表对应的字段类型不一致导致的,但是我反复观察,我的字段是没问题的,类型都是varchar(40),没有问题。

这里奉上一篇对于1215错误讲解详细的文章:https://cloud.tencent.com/developer/article/1005293

正在我一筹莫展时,我突然想起为什么一起建立的另一张表的外键可以建立?通过变量排除法,我终于得知此次问题的“元凶”:

字段排序编码不一致:

记一次mysql坑爹的外键排坑经历

记一次mysql坑爹的外键排坑经历

一个是utf_unicode_ci,一个是utf8_general_ci!

把这个编码改成一致之后,外键成功建立。