美文网首页
导数据遇到的问题之重复索引的问题

导数据遇到的问题之重复索引的问题

作者: 长在床上的人 | 来源:发表于2016-09-05 11:13 被阅读0次

    在给nlp组导入数据到MySQL中遇到的问题之一,数据库设置的是大小写不敏感,然而,业务需要,要求keyword字段是需要大小写敏感的,且设置了联合唯一索引 keyword和nature. 遇到了问题: 

     { [Error: Duplicate entry 'Johann Sebastian Bach: Goldberg Variations, for keyboard (Clavie' for key 'keyword'] code: 'ER_DUP_ENTRY', errno: 1062, sqlState: '#23000' }

    原因是:  插入数据之前,先做的检查工作,检查时候加入了binary字段,故是大小写敏感的,所以,当插入'xxXx'的时候,我认为是没有重复数据的

    但是插入数据的时候,因为数据库是大小写不敏感的,而且设置了联合唯一索引,所以 xxxx 和xxXx 数据库认为是重复的,故报错

    解决方法:将keyword的字段的collation设置为utfs_bin

    此时,长达几十万的数据终于顺利跑下去了,但是没过多久又遇到了相同的报错!这次错误与上次错误虽然报错的信息相同,但是错误原因确并不相同

    由于设置了联合索引,索引的长度好像是747K(具体多少忘记了,总之有长多限制),当keyword的值太长的时候,严重超过了mysql的索引限制,所以就会将keyword字段截断,比如原keyword的字段是''Johann Sebastian Bach: Goldberg Variations',截断以后,可能只是'Johann',而Johann 已经存在于数据库中,所以,依然会报有重复的主键.

    解决方法:问了同事以后,同事说解决的办法就是将 keyword和nature组合成一个字符串,然后md5以后作为专门的检查字段,设置为唯一,可以解决这个问题.╮(╯_╰)╭.我认为并不是什么太好的解决办法,于是取消了对keyword和nature的联合唯一所索引,改为了普通的索引,因为程序中依然有了检查重复的判断,这个唯一索引其实是有些重复的.

    相关文章

      网友评论

          本文标题:导数据遇到的问题之重复索引的问题

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