背景:最近有个需求,需要根据品牌名(varchar)去重数据。去重后发现数据有丢失。
问题:MySql中字符串大小写默认不区分。
整个例子实验一下。像平常一样建一张表,插入两条数据。
##创建一张表,插入两条数据,一个首字母大写,一个全部是小写。
CREATE TABLE NAME(name VARCHAR(10));
insert into NAME VALUES('linghu');
insert into NAME VALUES('LingHu');
执行如下脚本,查询出来两条数据,确实是不区分大小写的。
解决方案:
1.查询条件前添加binary字段;
select * from name where binary name = 'linghu';
加binary后的查询结果.png
2.设置字符集和排序方式;
设置后再进行查询,指定小写只能查询出来小写的一条字段。
查询结果.png
3.创建表的时候指定binary类型,或者更改字段类型;
###建表时用Binary标示敏感的属性
CREATE TABLE NAME(
name VARCHAR(10) BINARY
);
##或者更改原有字段属性,指定字符集和排序规则。
ALTER TABLE NAME MODIFY COLUMN name VARCHAR(10) BINARY CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL;
4.在MySQL的配置文件my.ini中增加一行:lower_case_table_names = 0;
其中 0:区分大小写,1:不区分大小写。(这种方法我并没有尝试。)
网友评论