mysql列值不区分大小写的问题

在将分组聚合结果(就是用了group by col,col2…)保存到mysql时,列是一个联合唯一索引,多个列的组合不重复,发现下面这两个语句会报错:

1Duplicate entry '2019-01-04-tx' for key 'PRIMARY'

很显然,这是主键或者唯一索引冲突导致的。

因为我执行了这样两条sql:

insert into tableName(date,workflow,cou) values('2019-01-04','tx',10000);
insert into tableName(date,workflow,cou) values('2019-01-04','Tx',100000);

mysql会将这date,workflow两列的值组合,作为索引,索引的初衷当然是为了提高高并发查询效率,但是在这里

2019-01-04-tx

2019-01-04-Tx

被当作一样的联合值了,所以报错,索引冲突。

解决方法是:

修改列指定binary

将workflow修改为区分大小写,这里是workflow取值tx,Tx造成的冲突。显然,要用到alter语法:

alter table statistic_daily_workflow_count modify column workflow varchar(170) binary character set utf8 collate utf8_bin;

这样就能愉快的玩耍了。

所以,需要注意的是

问题一:MySql默认主键不区分大小写

实例:

-- 创建混合类型 
create table PlainText(
Content nvarchar(50) ,
primary key(Content)
);

insert into PlainText values('a');
insert into PlainText values('A');

抛出异常:Duplicate entry ‘a’ for key ‘PRIMARY’,主键不能重复

解决方法1:创建表时字段指定binary

create table PlainText(
Content nvarchar(50) binary,
primary key(Content)
);

解决方法2:修改列指定binary

-- 修改列
ALTER TABLE `Md5Data`.`PlainText` 
CHANGE COLUMN `Content` `Content` VARCHAR(55) CHARACTER SET 'utf8' BINARY NOT NULL DEFAULT '' ;

问题二:MySql查询时不区分大小写

第一种:让mysql查询时区分大小写

select * from usertable where binary id = 'A';

第二种:在建表时加以标识

create table table_name {
id varchar(32) binary;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大数据技术派

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值