一个用户在添加Discuz!的js调用的时候提示
SQL: INSERT INTO [Table]settings (variable, value) VALUES ('jswizard_threads_eME', '....')
Error: Duplicate entry 'jswizard_threads_eME' for key 1
Errno.: 1062
上面的数据库错误显示是提示settings已经有了jswizard_threads_eME这个数据,但实际上确实又没有这个数据,一直在排查是什么原因,然后发现了这个mysql诡异的现象
当settings表内存在jswizard_threads_Cp4时,
再插入jswizard_threads_eME会提示Duplicate entry,
也就是说下面2条sql第二条会报错的,
而数据库中确实没有jswizard_threads_eME这个内容。
后来再次测试发现公司的mysql版本为4.1.20有这种情况,mysql 5 无此情况
mysql代码:
INSERT INTO cdb_settings( variable, value ) VALUES ('jswizard_threads_eME', '')
总结下,估计mysql把jswizard_threads_eME和jswizard_threads_Cp4当成同一字符串了
本次诡异事件的主角mysql server version: 4.1.20-log
补记,随后发现更多不能插入的字符串,初步怀疑是settings表的索引坏了,但数据库修复,优化无效,在重建settings表之后问题解决。以后有用户无故(无故是指明明为空但是仍然提示Duplicate entry)数据表不能插入的情况,看来重建数据表也是一个解决方式
哈哈哈,我路过
河蟹的路过
偶也路过
这小孩不错
这个嘛`~~~
飘过
这个应该是你建的索引的问题。你上面的2个字符串的前17位是一样的,当你的索引:如char(16) 时,他就会有重复键的提示。
To s7v7nislands:cdb_settings的索引字段是varchar(32) 应该不是你说的原因 还没找到为什么
到目前位置再没出现过重复键的这个问题。