MySQL查询条件字符串尾部空格问题

问题描述

最近工作上遇到一个坑,有测试同事在MySQL上造测试数据,在给一个varchar的字段赋值时,在字符串尾部多输入了一个空格。而我的代码在利用这个字段做查询时,又会把这一个带空格的数据给查了出来,导致后面测试的一系列问题。

比如有一张users表:

id(varchar) username(varchar)
1 test
2 test (尾部带一个空格)

sql语句:

select * from users where username = 'test'

此时会将id为1、2的两条user表数据都查询出来。这种情况,当遇到需要生成一个key为username,value为user的hashmap时,就会出现不可预知的bug。

问题原因

MySQL 校对规则属于PADSPACE,针对的是 varchar char text …… 等文本类的数据类型,会忽略尾部空格。
此为 SQL 标准化行为,无需要设置也无法改变。

解决方法

1、在查询sql中使用like关键字

select * from users where username like 'test'

2、使用BINARY

select * from users where username = BINARY'test'
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。