我正在使用MySQL 5.5.37。如果我在我的数据库上运行以下查询
select count(*) FROM user where user_name = 'admin';
我回到结果“3”。但是,当我执行查询
时select count(*) FROM user where user_name = 'admin ';
,(注意单词“admin”之后的额外空格,我也得到结果“3”。事实上,当我查看记录时,它们与第一个查询的记录相同。但是,有在我的数据库中没有user_name字段等于“admin”的记录。鉴于此时我无法升级我的MySQL数据库,我该怎么做才能确保第二个查询(带有额外的空格)返回正确的结果(即“0”)?
编辑: user_name字段的类型为varchar(50)。
答案 0 :(得分:1)
我并非100%确定是这种情况,但看起来你的user_name字段是char(n)字段而不是varchar(n)。
这些字段用空格填充以完全匹配字段的长度,而varchars是(我相信)空终止字符串。
两个查询都返回相同的答案,因为它们也用空格填充缺少的字符。
如果希望查询正常工作,请考虑将列的类型更改为varchar。
答案 1 :(得分:0)
你可以尝试使用这篇文章中描述的正则表达式吗? Query for exact match of an string in SQL
答案 2 :(得分:0)
select count(*) FROM [sb_user] where user_name = 'admin ';
你可以试试这个