我在使用SQL LIKE、=和LIKE BINARY时遇到了非常奇怪的行为。
注意:密码的前三个字符实际上是3Vf
,查询的其余部分也是语法正确的。
SUBSTRING(password,1, 3) = "3VF" -> returns true
SUBSTRING(password,1, 3) = "3Vf" -> returns true
SUBSTRING(password,1, 3) LIKE "3VF" -> returns true
SUBSTRING(password,1, 3) LIKE "3Vf" -> returns true
然而,如果我使用LIKE BINARY,则会得到区分大小写的行为。
SUBSTRING(password,1, 3) LIKE BINARY "3VF" -> returns false
SUBSTRING(password,1, 3) LIKE BINARY "3Vf" -> returns true
我不理解为什么比较是不区分大小写的。考虑到密码是一个VARCHAR(64)
类型。在我看到的所有在线资源中,它们都说=和LIKE都是区分大小写的。
注意:我运行的完整查询是:
SELECT * from users where username="natas16" AND SUBSTRING(password,1, 3) = XX
此外,这不是一个真实世界的应用程序,而是Natas级别。它类似于一个“黑客”游乐场。他们有不同的级别和漏洞,你应该利用它们。因此,这不是一个真实世界的例子。
PASSWORD('Function')
来正确地存储它。虽然您所描述的行为非常奇怪。https://dev.mysql.com/doc/refman/5.0/en/password-hashing.html - Colton