【 TiDB 使用环境】测试环境
【 TiDB 版本】5.7.25-TiDB-v6.5.2
【复现路径】
执行下面的语句查询不出数据。除了使用UPPER()LOWER()函数之外,如何设置可以使这个表大小写不敏感么?
SELECT * FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA = 'test'
AND TABLE_SCHEMA = 'TEST'
查看系统参数
【 TiDB 使用环境】测试环境
【 TiDB 版本】5.7.25-TiDB-v6.5.2
【复现路径】
执行下面的语句查询不出数据。除了使用UPPER()LOWER()函数之外,如何设置可以使这个表大小写不敏感么?
SELECT * FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA = 'test'
AND TABLE_SCHEMA = 'TEST'
查看系统参数
你这sql能查出数据就见鬼了吧?
SELECT * FROM INFORMATION_SCHEMA.TABLES
WHERETABLE_SCHEMA = ‘TEST’
或者
SELECT * FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA = ‘test’
怎么能同时都等于。。。。
大小写不敏感的时候就可以。普通表在建表的时候就设置了大小写不敏感。但是这种系统表不知道怎么设置才能大小写不敏感。
你这种需要指定表或者列的排序格式是utf8mb4_general_ci啊,但是系统表tables他的默认排序格式不是这个。。。。
而且系统表不支持修改表结构
对呀,所以来社区找大神指导
开发规范表名、库名全部小写 :)
稍微有点迟了,跑了二十年了~
DDL里就设置排序,数据量不大就重新建个库导数据呗
感觉是dead code,使用UPPER()LOWER() 再加上 union all 拼一下吧,
真的不能再挽救一下了么?
你的意思是直接改系统表?
utf8mb4_general_ci应该就是不敏感的,敏感的是utf8mb4_bin
那个是系统变量,但是这个系统表是utf8mb4_bin
没试过都是按着规范来了
历史包袱吧将就着用
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’;
可以查看一下官方参数设置。
好问题,历史代码别说改了,能跑起来就不错了,看看有没有大神有办法
不能改了