2015-02-24 67 views
0

我正在使用MySQL 5.5.37。如果我在我的数据库上运行以下查询如何让额外的空白影响我的MySQL查询结果?

select count(*) FROM user where user_name = 'admin'; 

我得到结果“3”。然而,当我执行查询

select count(*) FROM user where user_name = 'admin  '; 

,(注意“管理”一词后,多余的空格,我也得回结果“3”。事实上,当我看到德记录,他们是与第一个查询相同的记录,但是,我的数据库中没有记录,其中user_name字段等于“admin”。鉴于此时我无法升级我的MySQL数据库,我该怎么做才能确保第二个查询(用wiht多余的空白)返回正确的结果(即 “0”)

编辑:?的USER_NAME字段的类型为varchar(50)的

回答

1

我不是100%确定是这种情况,但它看起来像你的user_name字段是char(n)字段而不是varchar(n)。

这样的字段充满了空格以完全匹配字段的长度,而varchars是(我相信)以null结尾的字符串。

这两个查询都返回相同的答案,因为它们还用空格填充缺少的字符。

如果您希望查询正常工作,请考虑将列的类型更改为varchar。

+0

我编辑的qesution。该字段已经键入“VARCHAR(50)” – Dave 2015-02-24 21:35:34

0
select count(*) FROM [sb_user] where user_name = 'admin  '; 

,你可以尝试这一个

+0

这会导致错误“ERROR 1064(42000):您的SQL语法错误;请查看与您的MySQL服务器版本对应的手册,以查找在[user]附近使用的正确语法where user_name ='admin''在第1行“ – Dave 2015-02-24 21:49:43

+0

您可以尝试选择计数(*)从[sb_user]其中user_name LIKE'admin'; – 2015-02-24 22:01:07

+0

根据我对其他受访者的评论,它不是更改我的应用程序中的每个查询的选项。如果user_name的值不是'admin',那么MySQL应该准确地返回该值。 – Dave 2015-02-24 22:53:01