正文 1141字数 156,356阅读


select distinct * from prvt_pub_stmt_vn where issue_time >= '2020-08-01' and issue_time <= '2020-08-01' and prs_dmtd_cde in ('p','n');
Run code
Cut to clipboard


    select distinct * from prvt_pub_stmt_vn where issue_time >= '2020-08-01' and issue_time <= '2020-08-01' and prs_dmtd_cde in ('p','n','P','N');
    Run code
    Cut to clipboard


      查出来的结果竟然是一样的

      MySQL数据库基本上用的都是 utf8 的编码格式,而 utf8 编码格式还存在各种排序规则。常用的如下:

      utf8_bin:将字符串中的每一个字符以十六进制方式存储数据,区分大小写
      utf8_general_ci:不区分大小写,ci为case insensitive的缩写,即大小写不敏感

      utf8 编码格式的默认排序规则就是:utf8_general_ci——即不区分大小写。

      解决方案

      1.直接修改字段的属性为
      utf8_bin
      Run code
      Cut to clipboard

        ALTER TABLE prvt_pub_stmt_vn CHANGE prs_dmtd_cde prs_dmtd_cde VARCHAR(255) CHARACTER SET utf8 COLLATE utf8_bin;
        Run code
        Cut to clipboard


          2.不改变原有表结构,而是改SQL
          在查询字段前加上
          binary
          Run code
          Cut to clipboard
            关键字

            select distinct * from prvt_pub_stmt_vn where issue_time >= '2020-08-01' and issue_time <= '2020-08-01' and binary prs_dmtd_cde in ('p','n');
            Run code
            Cut to clipboard


              Mysql 默认查询是不分大小写的,可以在 SQL 语句中加入 binary 来区分大小写。

              binary 不是函数,是类型转换运算符,它用来强制它后面的字符串为一个二进制字符串,
              可以理解为在字符串比较的时候区分大小写。

              作者:Coder杨公子
              链接:https://juejin.cn/post/6871780646939803655
              来源:掘金