mysql 查询条件字段值末尾有空格的问题


今天遇到了很奇怪的mysql查询问题:

①当作为查询条件的字符串末尾有空格时,可以查到数据库中末尾不含空格的值

比如有这样一个sql语句:

select * from table where user='user ';

注意“user ”后面是有空格的,即“user空格”。

执行这个SQL语句,却可以查到数据库中user为"user"的那一行。


②当作为查询条件的字符串末尾没有空格时,可以查到数据库中末尾含空格的值

比如有这样一个sql语句:

select * from table where user='user';

注意“user”后面是没有空格的,即“user”。

执行这个SQL语句,却可以查到数据库中user为"user空格"的那一行。


原因:

查找相关资料:MySQL校对规则属于PADSPACE,对CHAR和VARCHAR值进行比较都忽略尾部空格,和服务器配置以及MySQL版本都没关系。


解决方案:

问题①

第一种方法:使用like

select *from table where user like 'user ';

第二种方法:使用BINARY

select *from table where user=BINARY 'user ';

第三种方法:使用length函数

select * from table where user='user ' and length(user)=length('user ');

三种方法都可以解决mysql 查询条件字段值末尾有空格但结果能查询出字段值末尾没有空格的记录的bug。


问题②

第一种方法:使用BINARY

select *from table where user=BINARY 'user';

第二种方法:使用length函数

select * from table where user='user' and length(user)=length('user');

两种方法都可以解决mysql 查询条件字段值末尾没有空格但结果能查询出字段值末尾有空格的记录的bug。




联系我们 | 友情链接