最近新换电脑导入sql后发现jpa无法给新生成的表创建外键,异常如下:
Caused by: org.hibernate.tool.schema.spi.SchemaManagementException: Unable to execute schema management to JDBC target [alter table buss_unit add constraint FKdywhjc2lpck37yow2r0enxcq6 foreign key (buss_unit_type_id) references buss_unit_type2 (id_)]
看异常应该是mysql引起的,直接在navicat中尝试给新生成的表添加外键依然提示错误
百度后发现原因,是因为导入的表的排序规则,与当前数据库的默认排序规则不一致导致的。
左侧原来的表的排序规则为utf8_general_ci,右侧新建表的排序规则为utf8_bin,二者排序规则不一致,所以无法创建外键关联,修改数据库排序规则后,删除表重新创建一切正常。
恶补了一下关于mysql排序规则的知识,之前没有太留意,以为字符集一样就可以互相兼容。
utf-8 有默认的排序规则:
命令: SHOW CHARSET LIKE 'utf8%';
区别:
utf8_general_ci
不区分大小写, 这个你在注册用户名和邮箱的时候就要使用。utf8_general_cs
区分大小写, 如果用户名和邮箱用这个 就会照成不良后果utf8_bin
: 字符串每个字符串用二进制数据编译存储。 区分大小写, 而且可以存二进制的内容utf8_general_ci
校对速度快, 但准确度稍差。utf8_unicode_ci
准确度高, 但校对速度稍慢。