如何让某一列的排序规则为大小写不敏感

系统版本 & kernel 版本

CentOS Linux release 7.6.1810 (Core)

4.20.10-1.el7.elrepo.x86_64

  • TiDB 版本

3.0.5

问题描述(我做了什么)

TiDB 列的排序规则

image

已有的数据

image

执行的sql语句

image

我期望的

MySQL 列的排序规则

image

已有的数据

image

执行的sql语句

image

在 3.0.5 版本测试后,和 MySQL 的行为不一致:

mysql> show create table studentG
*************************** 1. row ***************************
Table: student
Create Table: CREATE TABLE student (
id int(11) DEFAULT NULL,
name varchar(10) DEFAULT NULL,
age int(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci

image

我这边跟研发的同学确认下~~

目前针对 collation,tidb 只支持区分大小写的比较排序规则。

我看这说支持了啊


https://pingcap.com/docs-cn/v3.0/reference/sql/character-set/#collation-命名规则

语法上支持,实际在使用时是不支持的,还是区分大小写~~~

:pleading_face::pleading_face: 如果考虑在实际使用中支持这个排序规则的话,大概要多久?:smile:

确认了下,咱们暂时没有计划~~~

看到次消息有些失望

这类问题可以考虑使用upper lower之类的函数统一一下,以后的版本会考虑加入,多谢

关注该问题,我们业务定的需要大小写不敏感查询数据,业务逻辑进行处理还是很麻烦的:joy:

可以关注 TiDB 4.0 版本,在 4.0 版本将会支持 utf8mb4_general_ci,4.0 RC 版本已发布,并且已支持 utf8mb4_general_ci,欢迎测试。详细信息可以关注下(release node 文档描述的有些问题,已在修复中
) :

https://pingcap.com/docs-cn/stable/releases/4.0.0-rc/#新功能

https://github.com/pingcap/docs-cn/pull/2606

TiDB 最新动态敬请期待,感谢关注~~

2 个赞

666个赞

哈哈终于等到了

:+1::+1:

我们正在进行捉虫竞赛,可以参与一下,把测试 CI Collation 过程中发现的问题提到捉虫竞赛中,赚取积分拿 TUG 卫衣、蓝宝书、PCTA 考试券等

活动说明:左手尝鲜、右手周边?TiDB 4.0 捉“虫"竞赛来袭!

tidb 4.0

sql_mode:

ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

insert into test.test VALUES (1,‘SD’,‘0000-00-00 00:00:00’); insert into test.test VALUES (2,‘sD’,‘0000-00-00 00:00:00’); insert into test.test VALUES (3,‘LD’,‘0000-00-00 00:00:00’); insert into test.test VALUES (4,‘lD’,‘0000-00-00 00:00:00’);

select * from test.test;
3	LD	0000-00-00 00:00:00
1	SD	0000-00-00 00:00:00
4	lD	0000-00-00 00:00:00
2	sD	0000-00-00 00:00:00

select * from test.test where name = 'sd';
null

1.只有排序,不能查询? 2.NO_ZERO_IN_DATE、NO_ZERO_DATE没用?

你好,

请提供下表结构

id int name varchar(20) time datetime

建表语句指定utf8mb4_general_ci

目前在路上,具体建表语句待会发出来

CREATE TABLE test ( id int(11) NOT NULL, name varchar(255) COLLATE utf8mb4_general_ci DEFAULT NULL, time datetime DEFAULT NULL, PRIMARY KEY (id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;

好的,正在分析,稍等