SQL
4 行
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');
SQL
4 行
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');

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

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

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

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

解决方案

1.直接修改字段的属性为

代码片段
1 行
utf8_bin
代码片段
2 行
ALTER TABLE prvt_pub_stmt_vn CHANGE prs_dmtd_cde prs_dmtd_cde VARCHAR(255) 
CHARACTER SET utf8 COLLATE utf8_bin;

2.不改变原有表结构,而是改SQL
在查询字段前加上

代码片段
1 行
binary

关键字

SQL
4 行
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');

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

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

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