TIDB解析SQL时,对SQL中查询字段类型自动转换会进一步转换成模糊匹配吗?

CREATE TABLE test(
id INT(11) NOT NULL AUTO_INCREMENT COMMENT ‘主键’,
user_no VARCHAR(100) NOT NULL COMMENT ‘用户编号’,
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (id),
UNIQUE KEY uk_user(user_no),
)ENGINE =INNODB DEFAULT CHARSET = utf8mb4 COMMENT ‘测试表’;

使用SQL: SELECT * from test where user_no =10 发现其结果与:SELECT * from test where user_no ="%10%"相同;
使用SQL: SELECT * from test where user_no =“10” 能正确匹配;

请问一下TIDB解析SQL时,对SQL中查询字段类型自动转换会进一步转换成模糊匹配吗?

1、TiDB 这块的行为应该是和 MySQL 保持一致的,再确认下:

语句 1 :SELECT * from test where user_no =10 
语句 2 :SELECT * from test where user_no ="%10%" 
语句 3: SELECT * from test where user_no =“10” 

1)语句 1 和 语句 2 的查询结果相同,并且与语句 3 不同 ?
2)语句 3 的查询结果符合预期,语句 1 和语句 2 的查询结果不符合预期?

2、请提供下具体使用的 TiDB 的版本,以及语句 1 ~ 3 的测试结果截图,这里看下,感谢配合~~

这个是我测试的表,TIDB版本是4.0
CREATE TABLE test (
id int(11) NOT NULL AUTO_INCREMENT COMMENT ‘主键’,
tenant_id int(11) NOT NULL DEFAULT 1,
outer_user_no varchar(100) NOT NULL COMMENT ‘用户编号’,
created_at timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (id),
UNIQUE KEY test_tenant_id_IDX (tenant_id,outer_user_no)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin AUTO_INCREMENT=30001 COMMENT=‘测试表’
测试数据:
INSERT INTO test (tenant_id,outer_user_no,created_at) VALUES
(1,‘10dcb568-a663-4430-9c5b-d8de20247f1a’,‘2020-08-21 14:36:36.0’)
,(1,‘10’,‘2020-08-21 14:36:45.0’)
,(1,‘010a1548-fa2a-45b2-a85c-fbb5332eaeb3’,‘2020-08-21 14:36:53.0’)
;
下面是3条SQL语句的执行情况:
image


image

你好,不好意思,我刚才又测了一下,使用上面的表结构在mysql和tidb中的表现是一样的;
最开始我在MySQL中只对outer_user_no加了索引,因此mysql执行“SELECT * from test where user_no =10”这条SQL与TIDB不一致,之后我在Mysql中也加了索引 UNIQUE KEY test_tenant_id_IDX ( tenant_id , outer_user_no ),在执行“SELECT * from test where user_no =10”这条SQL发现与TIDB执行结果是一致的。

好的,感谢反馈 :handshake: