6

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 レベルですそれは一種の「ハッキング」の遊び場です。それらには、悪用することになっている脆弱性のさまざまなレベルがあります。したがって、これは実際の例ではありません。

http://www.overthewire.org/wargames/natas/

4

2 に答える 2

7

と が大文字と小文字を区別して動作するLIKEかどうかは、比較を行っているフィールドの照合によって決まります。=フィールドに大文字と小文字を区別しない照合がある場合 (私が推測しているように)、大文字と小文字を区別しない比較結果が得られます。フィールドにバイナリまたは大文字と小文字を区別する照合がある場合、またはBINARY比較でキーワードを使用してバイナリ比較を強制した場合、大文字と小文字を区別する比較が行われます。

于 2013-03-19T16:10:01.930 に答える
0

mysqlチュートリアルから、照合オプションと大文字と小文字を区別する方法を読んでください。

于 2013-03-19T16:11:34.567 に答える