关于mysql判断字符串的诡异事件
本文最后更新于 6000 天前,其中的信息可能已经有所发展或是发生改变。

一个用户在添加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_Cp4', '')
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)数据表不能插入的情况,看来重建数据表也是一个解决方式

评论

  1. 大头
    16年前
    2007-9-26 21:31:12

    哈哈哈,我路过

  2. lulu
    16年前
    2007-9-26 21:59:16

    河蟹的路过

  3. 桔子
    16年前
    2007-9-27 9:34:57

    偶也路过

  4. sherry
    16年前
    2007-9-27 9:40:06

    这小孩不错

  5. 习明
    16年前
    2007-9-27 11:16:13

    这个嘛`~~~

  6. 空谷
    16年前
    2007-9-27 23:04:29

    飘过

  7. s7v7nislands
    16年前
    2008-1-20 20:10:54

    这个应该是你建的索引的问题。你上面的2个字符串的前17位是一样的,当你的索引:如char(16) 时,他就会有重复键的提示。

  8. 博主
    16年前
    2008-1-21 15:58:13

    To s7v7nislands:cdb_settings的索引字段是varchar(32) 应该不是你说的原因 还没找到为什么
    到目前位置再没出现过重复键的这个问题。

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇