TIDB like忽略大小写

进行like 查询的时候怎么忽略大小写 让like都能匹配到

例如 select * from xxxx where like ’%aaa%‘ 也能匹配到AAA aaA

目前版本5.4

我记得以前说这是一个bug。你用最新版本的看看

SELECT VARIABLE_VALUE FROM mysql.tidb WHERE VARIABLE_NAME=‘new_collation_enabled’;
看下这个结果,然后看下
show create table table_name

如果是表名大小写不敏感,是这个配置项
image

不是表名 是对表中的列字段匹配 字符串类型

那就是楼上说的,要修改字符集实现

我擦 还要改配置 重启集群重新刷数据 代价太大了吧

那个是4.0的,刚注意到你是5.4的。5.4应该不需要重建集群这么麻烦

可以直接将 表的utf8mb4_0900_ai_ci 字符编码改为tidb支持的那4种就行了吗

CREATE TABLE `youtube_video` (

id int(10) unsigned NOT NULL AUTO_INCREMENT,
mainKeywrodId int(11) DEFAULT NULL COMMENT ‘主词id’,
searchId int(11) DEFAULT NULL COMMENT ‘搜索词id’,
userId int(11) DEFAULT NULL COMMENT ‘用户作者’,
videoId varchar(50) COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT ‘视频id’,
surfacePlot varchar(255) COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT ‘视频封面’,
url varchar(255) COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT ‘播放链接’,
title varchar(1000) COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT ‘视频title’,
intro text COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT ‘视频介绍’,
language varchar(50) COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT ‘语言字段’,
streamingType int(11) DEFAULT NULL COMMENT ‘视频流类型,1普通短视频,2直播视频,3short视频’,
shortDomainDict text COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT ‘短链 (爬简介时一同更新)’,
domainDict varchar(1000) COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT ‘外链’,
crawl int(11) DEFAULT ‘0’ COMMENT ‘爬取状态 -1 不需要处理 0 未爬取 1 入简介队列 2简介已完成 3简介任务出错 4没有可疑短链 5短链入队列 6短链已完成 7短链出错’,
crawlTime datetime DEFAULT NULL COMMENT ‘爬取时间’,
lengthText varchar(50) COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT ‘视频长度’,
viewCountText int(11) DEFAULT NULL COMMENT ‘观看次数’,
publishedTime datetime DEFAULT NULL COMMENT ‘发布时间’,
remark varchar(255) COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT ‘备注’,
createTime timestamp DEFAULT CURRENT_TIMESTAMP COMMENT ‘入库时间’,
isDelete int(11) DEFAULT ‘0’ COMMENT ‘删除标志: 1删除,0未删除’,
PRIMARY KEY (id) /*T![clustered_index] CLUSTERED */,
UNIQUE KEY videoId (videoId),
KEY userId (userId)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci AUTO_INCREMENT=346055349;

不行,这个是在开关开启的情况下才生效。
这里要为true才可以

这里其实可以绕开大小写敏感
如果筛选字段上没有索引的话可以直接用函数先将字段格式化成小写,然后再like。
这样一般效率不高,不过既然都是like了,应该影响不大。

5.4版本 new_collations_enabled_on_first_bootstrap默认是false,如果不开启就没办法用utf8mb4_general_ci排序规则。

推荐做法:
1、dumpling备份数据
2、重建集群开启 new_collations_enabled_on_first_bootstrap参数,或者升级到6.0版本(6.0中默认开启)
3、新集群中建表指定collation为utf8mb4_general_ci
4、导入备份数据

没有别的好办法了。

2 个赞

代价太大了,不如直接用lower函数将字段先转换成小写,然后再like