現象: 私はアカウント admin を持っていますが、不可解に ADMIN、Admin、および AdMin などの一連のアカウントを追加しました; パスワードをよく見てください。たとえそれが暗号文の署名であっても、あなたの知らないうちにたくさんあります。
理由: データベースのインストール時に大文字と小文字を区別しない設定が原因でした。
解決策: 3 番目の方法を提案し、フィールドのエンコード形式を個別に変更します。
1. 大文字と小文字の区別を再度有効にする
以前のMysql5.7は設定ファイルlower_case_table_namesを変更できましたが、mysql8はインストール時に変更が必要です. 移動したい人は誰でも変更できます.
2. クエリ条件に BINARY を追加
BINARY キーワードをクエリの sql に追加し、mysql の BINARY キーワードを使用して検索で大文字と小文字を区別します。
select * from ep_r_user_login a where BINARY a.LOGIN_CODE='admin';
select * from ep_r_user_login a where BINARY a.LOGIN_CODE= upper('Admin');
この方法も非常に面倒で、多くの変更が必要です
3. フィールドの文字セットを utf8_bin に変更します
特定のフィールドの文字セットの並べ替え規則を utf8_bin に変更し、ログインやパスワードなど、変更が必要なフィールドを変更してから、ログイン フィールドとパスワード フィールドのみを変更します。
alter table 表名 modify column 字段 varchar(32) COLLATE utf8_bin ;
具体的には、これを見てください: mysql storage is case insensitive
フィールド値の大文字と小文字は、mysql の照合規則によって制御されます。校正規則に関して言えば、文字セットについて話さなければなりません。文字セットは記号とコードのセットであり、照合は文字セット内の文字を比較するための規則のセットです。一般に、照合順序は関連する文字セット名で始まり、通常は言語名を含み、ci (大文字と小文字を区別しない)、cs (大文字と小文字を区別する)、または _bin (バイナリ) で終わります。
たとえば、次の表に示すように、utf8 文字セット:
1) utf8bin: utf8bin は、文字列内の各文字を大文字と小文字を区別するバイナリ データとして格納します。
2) utf8generalci: utf8generaci は大文字と小文字を区別しません。ci は case insensitive の略、つまり case insensitive です。
3) utf8generalcs: utf8generalcs は case-sensitive、cs は case-sensitive の略、つまり case-sensitive です。
4. すべてを変更する必要があり、データベースを再インストールしたくない場合
(必要ないと思います。最初は大文字と小文字が区別されず、後で多くのやり直しがあります)データベースをエクスポートし、新しいライブラリ文字セットを utf8_bin として作成し、新しいライブラリをインポートします