質問 最近、SSH フレームワークを使用して実用的なプロジェクトを完了していたときに、長い間悩まされていた不可解なバグに遭遇しました。最終的にそれを解決し、次のように記録しました。
…EXM? ? ?これでいいですか?さて、このバグの原因を突き止めたほうがいいでしょう。その後、さまざまなトラブルシューティング手順を実行しましたが、問題は見つかりませんでした。最後に、HQL の代わりにデータベースを直接クエリする SQL ステートメントを記述することを考えましたが、問題が見つかりました。 ユーザー名 = 'admin'、パスワード = 'admin' の場合、ユーザーから * を選択します。 ユーザー名 = 'Admin'、パスワード = 'admin' の場合、ユーザーから * を選択します。 上記の 2 つの SQL ステートメントを使用してテーブルを個別にクエリすると、結果は驚くほど同じになります。 ……! !検索エンジンにアクセスして、キーワード「MySQL クエリ ケース」を検索すると、問題が見つかります。 MySQL クエリでは大文字と小文字は区別されません。これは本当にショックでした。キーワードは一般的に大文字と小文字が区別されないことは知っていましたが、クエリされるパラメータでも大文字と小文字が区別されないとは思いませんでした。 !次の SQL ステートメントをもう一度試しても、結果は同じです。 ユーザー名 = 'ADMIN'、パスワード = 'admin' の場合、ユーザーから * を選択します。 解決 インターネットで関連記事を探しましたが、よく書かれていました。ここに記事の説明を貼り付けます。 Mysql のデフォルトの文字検索戦略は、utf8_general_ci (大文字と小文字を区別しない)、utf8_general_cs (大文字と小文字を区別する)、utf8_bin (大文字と小文字を区別するバイナリ比較) です。 (注意: MySQL 5.6.10 では、utf8_genral_cs はサポートされていません!!! ! ! ) テーブルを作成するときは、テーブルの collate プロパティを utf8_general_cs または utf8_bin に直接設定します。テーブルがすでに作成されている場合は、フィールドの Collation プロパティを utf8_general_cs または utf8_bin に直接変更します。 -- テーブルを作成します: テーブルtesttを作成します( id INT 主キー、 名前 VARCHAR(32) NOT NULL )ENGINE = INNODB COLLATE = utf8_bin; -- テーブル構造の照合プロパティを変更します。ALTER TABLE TABLENAME MODIFY COLUMN COLUMNNAME VARCHAR(50) BINARY CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL; SQL ステートメントを変更し、クエリするフィールドの前に -- 各条件の前に binary キーワードを追加します。select * from user where binary username = 'admin' and binary password = 'admin'; -- パラメータを binary('') で囲みます。select * from user where username like binary('admin') and password like binary('admin');
要約する 以上がこの記事の全内容です。この記事の内容が皆様の勉強や仕事に何らかの参考学習価値をもたらすことを願います。123WORDPRESS.COM をご愛顧いただき、誠にありがとうございます。これについてもっと知りたい場合は、次のリンクをご覧ください。 以下もご興味があるかもしれません:
|
<<: Ubuntu 16.04にJenkinsをインストールするための詳細な手順
>>: オンラインチャットを実現するVue+sshフレームワーク
序文セキュリティ部門からSQLインジェクションやXSS攻撃の脆弱性などに関する警告メールを頻繁に受け...
Linux では、シンボリック リンクを作成または削除する必要がある場合があります。もしそうなら、何...
注: この記事のすべての写真はインターネットから収集されたものであるため、DELL R720 サーバ...
IE ブラウザで「ホームページとして設定」および「お気に入りに追加」機能を実装する方法解決:指定さ...
1 yumでソフトウェアをインストールしたときにダウンロードしたrpmパッケージを保存しますyum ...
なお、これはvue-cliで作成したプロジェクトではありません。vue.jsを参照して記述したHTM...
<br />百度百科事典の正式版がついにオンラインになりました。2年間の「テスト版」の帽...
方法1: DOMが提供するイベントオブジェクトのターゲットイベント属性を使用して値を取得し、送信する...
Linux コンピュータには 2 つの時間があります。1 つはハードウェア時間 (BIOS に記録さ...
使用される Docker イメージが増えるにつれて、イメージを保存する場所、つまりウェアハウスが必要...
静的ファイルNginx は高いパフォーマンスで知られており、フロントエンドのリバース プロキシ サー...
目次1. Set()+Array.from() を使用する2. 2層ループ+アレイ接合方式の使用3....
序文あるプロジェクトの実行可能ファイルをインストールすると、MySQL 自体をインストールできるよう...
この記事では、スクロールウィンドウを実装するためのJavaScriptの具体的なコードを参考までに紹...
フォームを作成するときに、名前、携帯電話番号、出生地などの 2 つのフィールドを揃える状況に遭遇する...