binding执行计划跟字符集和排序规则的关系

版本:v4.0.13
两张查询表的字符集和排序规则为:utf8mb4,utf8mb4_general_ci
character_set_connection: utf8
collation_connection: utf8_general_ci

创建binding:
create global binding for
select …
using
select … force index(idx_created_at)

登陆客户端查询:
执行计划正常走了索引
image

查看了dashboard,程序中跑的执行计划没有走索引

查看binding信息:
show global BINDINGS\G
image

set session character_set_connection=utf8mb4;
此时客户端的执行计划也不走binding的索引了

所以想着可能是字符集和排序规则的问题
set session collation_connection=utf8mb4_general_ci;
删除binding然后重新创建binding
创建binding:
create global binding for
select …
using
select … force index(idx_created_at)

此时binding信息
image

这时候程序能够正常走索引了,我们把connection的相关参数设置成utf8mb4和utf8mb4_general_ci的时候,客户端也能够正常走索引,但是和开发聊了之后,开发说程序的连接配置也是utf8,我只能说我不李姐

1 个赞

看上去像是程序连接实际使用的并非utf8。4.0.14版本后字符集对spm就没影响了。https://github.com/pingcap/tidb/pull/23295

看了jdbc的参数就是utf8,这才是我觉得诡异的地方:joy:
测试了下4.0.14确实可以,但是4.0.13的问题依旧很诡异

该主题在最后一个回复创建后60天后自动关闭。不再允许新的回复。