Dreamer Dreamer
首页
  • 分类
  • 标签
  • 归档
关于
GitHub (opens new window)

lycpan233

白日梦想家
首页
  • 分类
  • 标签
  • 归档
关于
GitHub (opens new window)
  • Mysql

    • 浅谈char与varchar尾随空格对比
      • 背景
      • 实验
        • 环境
      • 结论
      • 相关文档
    • utf8存储emoji处理
    • Mysql 查询每个班级的前几名
    • Text为什么不支持设置默认值
    • Mysql 事务级别与差异
    • Mysql SQL 优化思路
  • Node

  • Go

  • Docker

  • 后端
  • Mysql
lycpan233
2023-12-06
目录

浅谈char与varchar尾随空格对比

# 背景

在日常业务中,偶然发现前端传入的串是有尾随空格的,但是实际使用中并未出问题。 例如执行查询:

SELECT * FROM a WHERE str = "你好";
1

但是可以匹配到:

str = `你好 `; 
str = `你好`; 
1
2

# 实验

# 环境

Mysql 5.7.27

未调整空格处理模式 (MySQL :: MySQL 8.0 Reference Manual :: 10.8.5 The binary Collation Compared to _bin Collations (opens new window))

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

# 结论

  • 插入带尾部空格的字符串
    • char,截取尾随空格
    • varchar,不做处理
  • 查询对比时
    • 等号,过滤等号右侧的尾随空格
    • LIKE,不做处理

# 相关文档

MySQL :: MySQL 8.0 Reference Manual :: 11.3.2 The CHAR and VARCHAR Types (opens new window)

编辑 (opens new window)
上次更新: 2025/06/12, 08:45:25
utf8存储emoji处理

utf8存储emoji处理→

最近更新
01
docker基础概念
02-26
02
js 获取变量准确类型
02-19
03
Mysql SQL 优化思路
02-18
更多文章>
Theme by Vdoing | Copyright © 2023-2025 Dreamer | MIT License
粤ICP备2025379918号
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式