new_collations_enabled_on_first_bootstrap 参数真正的含义

遇到1个很有意思的问题,执行下列sql语句
create table a(id int,name char(4)) charset=utf8mb4 collate=utf8mb4_bin;
create table b(id int,name varchar(40)) charset=utf8mb4 collate=utf8mb4_bin;
insert into a values(1,‘test’);
insert into b values(1,'test ');
select * from a,b where a.name = b.name;

在mysql 5.7.31 版本的时候,能够关联查询查出来数据,在tidb 5.3.1 版本上不行(new_collations_enabled_on_first_bootstrap 为false)



在v.6.1.0上试了下,可以关联查询查出来数据(new_collations_enabled_on_first_bootstrap 已经为true)

我的个人想法,这跟varchar字段类型,在存储的值有空格的情况下,查询的处理方式有关,经过下列测试
create table t1 (id int,name varchar(10));
insert into t1 values(1,‘a’),(2,’ a’),(3,'a ');
select * from t1 where name = ‘a’;
select * from t1 where name = 'a ';


mysql 情况下,如果varchar类型存储的值有空格,查询的时候,会把值右边的空格也给查询出来,例如a和a空格是相等的值
tidb 情况下,如果varchar类型存储的值有空格,查询的时候,值右边的空格不会查询出来,例如a和a空格是不想等的值

但是不知道,tidb 为啥在new_collations_enabled_on_first_bootstrap 设置为true的情况下,它对varchar 的空格查询方式又和mysql 一样?

该配置项只有在初次初始化集群时生效,初始化集群后,无法通过更改该配置项打开或关闭新的 collation 框架;

https://docs.pingcap.com/zh/tidb/v5.2/tidb-configuration-file#new_collations_enabled_on_first_bootstrap