美文网首页
mysql建表设置unique的注意事项

mysql建表设置unique的注意事项

作者: 如烟花非花 | 来源:发表于2018-04-02 17:15 被阅读200次

背景介绍

在项目中,实际遇到一个问题。随着业务的进行,这边要求对多个产品进行统一登陆接口的功能,这边需要将用户信息表导入SSO中的用户信息中。
实际在导入中发现频繁的报错:ERROR 1062 (23000) at line 1: Duplicate entry 'xxx@qq.com' for key 'service_id'
实际通过vim去查询,发现存在这样两条数据,导致信息插入报错:

sql结果.png

分析问题

查看了原有的库,这边确实存在两条数据,但是唯一的不同就是这个qq这两个字符是不同的。分析了两个库的建表语句。


新建数据库.png 旧的数据库.png
通过导出建表语句可以看出,原来的CloudUser表中,对service_id来说,采用的校对集为'utf8_bin',这个是对大小写敏感的。而新建的表中没有这个限定,默认是大小写不敏感的,所以出现上面报错的那个问题。

解决方案

mysql官方文档.png
从mysql的官方文档看:对于非二进制类型的串,如CHAR、VARCHAR、TEXT,其实是大小写不敏感的。所以,这里需要和旧库一样进行处理,将新库的那个service_id的字符类型调整成BINARY、VARBINARY、BLOB,ALTER TABLECloudUserMODIFY COLUMNservice_idVARCHAR(128) BINARY;或者如下修改新表ALTER TABLE CloudUser MODIFY service_id varchar(128) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL UNIQUE;

参考文献

相关文章

网友评论

      本文标题:mysql建表设置unique的注意事项

      本文链接:https://www.haomeiwen.com/subject/mczvpxtx.html