データベースの大文字と小文字が区別されなくなった後、値も区別されなくなります

現象: 私はアカウント 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 として作成し、新しいライブラリをインポートします

 

おすすめ

転載: blog.csdn.net/myfmyfmyfmyf/article/details/128495265