【问题标题】:Is there a way to distinguish between two strings that are the same except for different upper and lowercase letters in mysql有没有办法区分两个相同的字符串,除了mysql中不同的大小写字母
【发布时间】:2012-10-11 03:39:35
【问题描述】:

我有一个我制作的 java 程序,它将创建一个 5 位字符串并将其添加到 mysql 数据库中。生成的字符串将是数字 1-9、字母 a-z 和 A-Z 的每个组合

00000 ... 00009 0000a ... 0000z 0000A ... 0000Z 00010 ... 00019

等等

我的问题是当将这些值添加到数据库时,它不会添加 0000A,因为 0000a 已经存在

例如,如果我

INSERT INTO `mytable`(`mycolumn`) VALUES ("00000");

INSERT INTO `mytable`(`mycolumn`) VALUES ("0000a");

INSERT INTO `mytable`(`mycolumn`) VALUES ("0000A");

我的数据库中出现的唯一值是 00000 和 0000a

到底有没有让mysql在两者之间做出这种区分,这样我就可以拥有看起来唯一的字符串

【问题讨论】:

    标签: java mysql string uppercase lowercase


    【解决方案1】:

    MySql 字符串是case sensitive by default

    您可以在MYCOLUMN 字段中使用utf8_bin 之类的区分大小写的排序规则:

    CREATE TABLE MYTABLE (
        ID BIGINT AUTO_INCREMENT, 
        // other fields...
    
        MYCOLUMN VARCHAR(128) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL UNIQUE, 
        PRIMARY KEY(ID)
    );
    

    【讨论】:

      【解决方案2】:

      要使列区分大小写,您可以在定义中使用关键字 binary。例如:

      CREATE TABLE mytable (
          mycolumn VARCHAR(20) BINARY
      );
      

      无论如何,最好的解决方案是使用@Reimeus 所说的区分大小写的排序规则。

      【讨论】:

      • 是的,@Reimeus 解决方案更好。实际上是我使用的,但这是我想到的第一个。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-03-17
      • 2015-04-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多