系统表TABLES如何设置大小写不敏感

【 TiDB 使用环境】测试环境
【 TiDB 版本】5.7.25-TiDB-v6.5.2
【复现路径】

执行下面的语句查询不出数据。除了使用UPPER()LOWER()函数之外,如何设置可以使这个表大小写不敏感么?

SELECT * FROM INFORMATION_SCHEMA.TABLES  
WHERE TABLE_SCHEMA = 'test'
AND TABLE_SCHEMA = 'TEST'

查看系统参数

image

你这sql能查出数据就见鬼了吧?
SELECT * FROM INFORMATION_SCHEMA.TABLES
WHERETABLE_SCHEMA = ‘TEST’
或者
SELECT * FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA = ‘test’
怎么能同时都等于。。。。

:yum:大小写不敏感的时候就可以。普通表在建表的时候就设置了大小写不敏感。但是这种系统表不知道怎么设置才能大小写不敏感。

有图有真相~

你这种需要指定表或者列的排序格式是utf8mb4_general_ci啊,但是系统表tables他的默认排序格式不是这个。。。。
而且系统表不支持修改表结构

对呀,所以来社区找大神指导 :yum:

开发规范表名、库名全部小写 :)

:joy:稍微有点迟了,跑了二十年了~

DDL里就设置排序,数据量不大就重新建个库导数据呗

感觉是dead code,使用UPPER()LOWER() 再加上 union all 拼一下吧,

:joy:真的不能再挽救一下了么?

:thinking:你的意思是直接改系统表?

utf8mb4_general_ci应该就是不敏感的,敏感的是utf8mb4_bin

那个是系统变量,但是这个系统表是utf8mb4_bin

没试过都是按着规范来了

历史包袱吧将就着用

  1. 设置数据库和表的字符集与排序规则

TiDB支持字符集和排序规则(collation),你可以选择一种不区分大小写的排序规则。下面是设置示例:

步骤1:创建数据库时指定collation

CREATE DATABASE test CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;

  • utf8mb4_general_ci 是一个不区分大小写的排序规则(collation)。

步骤2:创建表时指定collation

如果已经有数据库,需要对表单独设置:

CREATE TABLE your_table_name ( your_column_name VARCHAR(255)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;

你也可以修改现有表的collation:

ALTER TABLE your_table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
2. 修改系统参数 lower_case_table_names

在TiDB中,你可以使用系统变量来影响大小写敏感性。设置 lower_case_table_names 参数有如下几种值:

  • 0:大小写敏感。
  • 1:不区分大小写,所有表名存储为小写。
  • 2:大小写敏感,但创建表时会存储为给定的大小写。

你可以查看当前的配置:

SHOW VARIABLES LIKE ‘lower_case_table_names’;

可以查看一下官方参数设置。

好问题,历史代码别说改了,能跑起来就不错了,看看有没有大神有办法

不能改了