mysql表名不区分大小写(字段值区分大小写设置方式)

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

1Duplicateentry’2019-01-04-tx’forkey’PRIMARY’

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

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

1insertintotableName(date,workflow,cou)values(‘2019-01-04′,’tx’,10000);2insertintotableName(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语法:

1altertablestatistic_daily_workflow_countmodifycolumnworkflowvarchar(170)binarycharactersetutf8collateutf8_bin;

utf8_bin或者utf8mb4都是可以的。

这样就能愉快的玩耍了。

所以,需要注意的是

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

实例:

1–创建混合类型2createtablePlainText(3Contentnvarchar(50),4primarykey(Content)5);67insertintoPlainTextvalues(‘a’);8insertintoPlainTextvalues(‘A’);

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

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

1createtablePlainText(2Contentnvarchar(50)binary,3primarykey(Content)4);

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

1–修改列2ALTERTABLE`Md5Data`.`PlainText`3CHANGECOLUMN`Content“Content`VARCHAR(55)CHARACTERSET’utf8’BINARYNOTNULLDEFAULT”;

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

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

1select*fromusertablewherebinaryid=’A’;

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

1createtabletable_name{2idvarchar(32)binary;3}

猜你可能喜欢

hive亿级用户表整挂到复活的经历

redis 用法

前段时间我的大数据面试笔记(含答案)

新老用户,日活,周活,月活的hive计算

一个基于hadoop的分词小项目

《人民的名义》小说文本分析

发表评论

登录后才能评论