7

我想知道在正常选择操作的情况下,搜索是不区分大小写的。所以SELECT * FROM tbl WHERE name = aBc也会考虑带有值 ABC、abc、abC 等的名称

但是在登录功能的情况下,我们只是 SELECT * FROM tbl WHERE password = aBc 区分大小写,只考虑带有 aBc 值的密码。

这是怎么发生的?我在搜索中没有找到任何关于此的内容。

请注意解释。

谢谢大家。

4

5 回答 5

5

我认为这取决于列的排序规则,MySQLutf8_general_cici的默认数据库排序规则,最后代表不区分大小写。

MD5仅当您使用或PASSWORD函数以加密格式存储密码时,区分大小写的密码才有效。

show variables like '%collation%';
+---------------------------+-------------------+
| Variable_name             | Value             |
+---------------------------+-------------------+
| collation_connection      | latin1_swedish_ci |
| collation_database        | utf8_general_ci   |
| collation_server          | latin1_swedish_ci |
+---------------------------+-------------------+
于 2012-07-30T06:43:46.350 回答
4

$sql="SELECT * FROM user where username='$username' AND BINARY password='$password'";

于 2016-06-09T06:56:43.033 回答
3

区分大小写使用 (BINARY)

SELECT * FROM tbl WHERE BINARY密码 = aBc

于 2012-08-10T14:27:29.807 回答
1

我不确定您的确切问题的答案是什么,但是如果您将密码作为文本存储在数据库中,那么这是一个非常糟糕的主意。相反,您应该做的是在注册时散列密码并以该形式将其存储在您的数据库中。然后,每次用户尝试登录时,您都会重新散列提交的密码,并将其与存储在具有匹配用户名的行中的散列进行比较。由于哈希区分大小写,这可以解决您的问题,同时增加急需的安全级别。

于 2012-07-30T06:50:35.307 回答
1

在许多实现中,密码或其哈希值在应用程序服务器中进行比较,因此不会出现问题。

于 2012-07-30T07:42:59.807 回答