浅谈char与varchar尾随空格对比
# 背景
在日常业务中,偶然发现前端传入的串是有尾随空格的,但是实际使用中并未出问题。 例如执行查询:
SELECT * FROM a WHERE str = "你好";
1
但是可以匹配到:
str = `你好 `;
str = `你好`;
1
2
2
# 实验
# 环境
Mysql 5.7.27
CREATE TABLE vc (v VARCHAR(4), c CHAR(4));
INSERT INTO vc VALUES ('ab ', 'ab ');
SELECT CONCAT('(', v, ')'), CONCAT('(', c, ')') FROM vc;
-- CONCAT('(', v, ')') | CONCAT('(', c, ')')
-- (ab ) | (ab)
SELECT * FROM vc WHERE v = 'ab';
-- v | c
-- ab | ab
SELECT * FROM vc WHERE c = 'ab';
-- v | c
-- ab | ab
SELECT * FROM vc WHERE v LIKE 'ab';
-- v | c
-- |
SELECT * FROM c WHERE v LIKE 'ab';
-- v | c
-- ab | ab
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# 结论
- 插入带尾部空格的字符串
- char,截取尾随空格
- varchar,不做处理
- 查询对比时
- 等号,过滤等号右侧的尾随空格
- LIKE,不做处理
# 相关文档
MySQL :: MySQL 8.0 Reference Manual :: 11.3.2 The CHAR and VARCHAR Types (opens new window)
编辑 (opens new window)
上次更新: 2023/12/09, 14:19:20