问题描述
最近工作上遇到一个坑,有测试同事在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'
网友评论