SQL LIKE、=、および LIKE BINARY でかなり奇妙な動作に遭遇しました
注 : パスワードの最初の 3 文字は実際には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 レベルです。それは一種の「ハッキング」の遊び場です。それらには、悪用することになっている脆弱性のさまざまなレベルがあります。したがって、これは実際の例ではありません。