select count(*) as n from user where username = 'xxx...';
用上面的语句检查一下

解决方案 »

  1.   

    这不一样吗?
    我打
    select count(*) from user where username = '灿烂涅磐'反回结果是0
    可插入十报错:java.sql.SQLException: Invalid argument value: Duplicate entry '灿烂涅磐' for key 2 SQL:INSERT INTO `user` ( `username`, `password`, `registertime`) VALUES ( '灿烂涅磐', '12345', '1091758978523');我确定表里没有username= '灿烂涅磐'
      

  2.   

    呵呵,
    这个问题呀.
    给你两个解决办法.第一个方法.设置默认字符集为GBK.第二个方法.设置 username  字段为 BINARY
    两种方法各有利弊吧.第一个方法. 在大多数情况是工作得都非常好.
    但英文半角y 与 ~ 字符无法正确区分
    例:
    mysql> SHOW GLOBAL VARIABLES LIKE 'character_set';
    +---------------+--------+
    | Variable_name | Value  |
    +---------------+--------+
    | character_set | latin1 |
    +---------------+--------+
    1 row in set (0.00 sec)mysql> SELECT 'y' = '~';
    +-----------+
    | 'y' = '~' |
    +-----------+
    |         0 |
    +-----------+
    1 row in set (0.00 sec)mysql> SHOW GLOBAL VARIABLES LIKE 'character_set';
    +---------------+-------+
    | Variable_name | Value |
    +---------------+-------+
    | character_set | gbk   |
    +---------------+-------+
    1 row in set (0.00 sec)mysql> SELECT 'y' = '~';
    +-----------+
    | 'y' = '~' |
    +-----------+
    |         1 |
    +-----------+
    1 row in set (0.00 sec)
    第二个方法.
    该用户名将会以严格的区分大小方式进行比较.
    同时如果使用 username LIKE 'A%' 之类的操作时.可能会返回不需要的结果
    就我的建议而言.是使用第一个方法
      

  3.   

    你的数据库user表中的字段有哪些。是不是id自段没有自动增张?
      

  4.   

    同意 shuixin13(犬犬(心帆)) ( ) 的第一个方法.设置默认字符集为GBK.插入记录可以使用 IGNORE 选项,这样就不会插入有同样值得primary/UNIQUE了,然后根据返回的纪录的多少,是0还是1判断是重复还是插入成功了的哈
    INSERT IGNORE INTO `user` ( `username`, `password`, `registertime`) VALUES ( '灿烂涅磐', '12345', '1091758978523');
      

  5.   

    我目前默认字符集就是gbk
    Variable_name  Value  
    character_set gbk 
    一样会出现这个问题.这是为什么?
      

  6.   

    如果我的username字段设置为 BINARY
    我的程序可能会出现很多漏洞..因为我在程序里并没有做大小写检查,这样在匹配用户名上我怕...
      

  7.   

    INSERT IGNORE INTO `user` ( `username`, `password`, `registertime`) VALUES ( '灿烂涅磐', '12345', '1091758978523');这样不好吗?通过返回记录数判断有没有插入成功!
      

  8.   

    那我先insert然后抓异常不一样吗?
    我想知道为什么明明表里不存在这个username的字段,我就不能插进去呢?
      

  9.   

    你的字符集已设置为 GBK
    然后在插入前搜索数据.也是不存在的.
    但是在插入时却出现重复键的问题?呵呵,不太可能的呀.
      

  10.   

    修复表
    REPAIR TABLE `user1` USE_FRM+-----------+--------+----------+----------------------------------------+
    | Table     | Op     | Msg_type | Msg_text                               |
    +-----------+--------+----------+----------------------------------------+
    | log.user1 | repair | warning  | Number of rows changed from 0 to 51924 |
    | log.user1 | repair | status   | OK                                     |
    +-----------+--------+----------+----------------------------------------+之后插入成功
    原因不明