7

通常の選択操作の場合、検索では大文字と小文字が区別されないのではないかと思っていました。したがってSELECT * FROM tbl WHERE name = aBc、ABC、abc、abC などの値を持つ名前も考慮されます

ただし、ログイン機能の場合、大文字 SELECT * FROM tbl WHERE password = aBc と小文字が区別され、aBc 値を持つパスワードのみが考慮されます。

これはどのように起こるのですか?検索でこれについて何も見つかりませんでした。

説明してください。

ありがとうございます。

4

5 に答える 5

5

列の照合、最後に大文字と小文字を区別しないMySQLutf8_general_ciのデフォルトのデータベース照合に依存すると思います。ci

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 に答える
3

大文字と小文字を区別するため (BINARY)

SELECT * FROM tbl WHERE BINARYパスワード = aBc

于 2012-08-10T14:27:29.807 に答える
1

あなたの正確な質問に対する答えが何であるかはわかりませんが、パスワードをデータベースにテキストとして保存している場合、それは非常に悪い考えです. 代わりにすべきことは、登録時にパスワードをハッシュし、その形式でデータベースに保存することです。次に、ユーザーがログインを試みるたびに、送信されたパスワードを再ハッシュし、一致するユーザー名を持つ行に格納されているハッシュと比較します。ハッシュは大文字と小文字を区別するため、必要なレベルのセキュリティを追加しながら、これで問題が解決します。

于 2012-07-30T06:50:35.307 に答える