MySQL用户名不区分大小写

时间:2015-02-25 12:03:05

标签: php mysql

先生,我在php mysql登录时遇到问题

在我的数据库中:

username = admin 
password = addbcea06efdd20f934b35e3b2111e55

第一次测试这是mysql上的查询

SELECT COUNT(`user_id`) FROM `users` WHERE `username` = 'admin' AND `password` = 'addbcea06efdd20f934b35e3b2111e55'

第一个结果是1

但是当我第二次测试时

SELECT COUNT(`user_id`) FROM `users` WHERE `username` = 'Admin' AND `password` = 'addbcea06efdd20f934b35e3b2111e55'

为什么结果保持1?这应该是0.我只将用户名更改为大写字母。 我该怎么办?

3 个答案:

答案 0 :(得分:2)

  

可以通过使用binary关键字创建MySQL列来区分大小写。我怀疑这是你的问题。您可以将列修改为二进制或将查询更改为

SELECT COUNT(`user_id`) FROM `users` WHERE BINARY `username` = 'Admin' AND `password` = 'addbcea06efdd20f934b35e3b2111e55'

答案 1 :(得分:1)

MySQL以不区分大小写的方式比较数据,但数据库,表和列名称除外。这就是为什么你的第二个查询没有返回0。

答案 2 :(得分:0)

避免区分大小写问题的最佳方法是在数据操作的两个部分使用php函数strtolower():插入和查询,在这种情况下是注册和登录验证。

您可以在代码中注册插入之前添加此行:

$username = strtolower ( $username );

这将使用户名始终以小写形式存储,然后您可以在程序的登录部分执行相同操作。由于您总是会比较小写字符串,因此不会出现区分大小写的错误。