遇到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 一样?