MySQL用户名不区分大小写


MySQL Username not case sensitive

先生,我在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。我只将用户名改为大写字母。我该怎么办?

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

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

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

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

您可以在注册前添加这一行插入您的代码:

$username = strtolower ( $username );

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