MySQLのデフォルトのソートルールに基づく落とし穴

MySQLのデフォルトのソートルールに基づく落とし穴

MySQL のデフォルトの varchar 型は大文字と小文字を区別しません (insensitive)。MySQL で大文字と小文字を区別したい場合は、並べ替えルールを設定する必要があります。

utf8_bin は、大文字と小文字を区別して、文字列内の各文字をバイナリ データとして保存します。

utf8_genera_ci は大文字と小文字を区別しません。ci は case insensitive の略語で、大文字と小文字を区別しないことを意味します。

utf8_general_cs は大文字と小文字を区別します。cs は case sensitive の略語です。

utf8_genera_ci を使用すると大文字と小文字が区別されないため、大文字と小文字を区別するコードや検証コードとして使用する場合など、このフィールドの内容が大文字と小文字を区別する場合は問題が発生します。

オプション utf8_general_cs は通常使用できないため、大文字と小文字を区別するには utf8_bin のみを使用できます。

1) ソートルールの設定は元に戻すことができます。以前に設定したソートルールが要件を満たしていない場合、ソートルールを変更した後に文字化けが発生する可能性があります。元のソートルールを復元すると、文字化けは消えます。

2) varchar型をvarbinary型に変更することができます

3) デフォルトのソートルール utf8_genera_ci をすでに使用していて、大文字と小文字を区別して結果をクエリする場合は、クエリ時に制限することができます。

テーブルからバイナリ列を選択します。

または

バイナリ列があるテーブルから列2を選択します。

補足: MySQL の文字セットと照合順序

文字セット:

文字はさまざまなテキストや記号の総称であり、文字セットは文字の集まりです。一般的な文字セット名: ASCII 文字セット、GB2312 文字セット、BIG5 文字セット、GB18030 文字セット、Unicode 文字セットなど。

コンピュータがさまざまな文字セットのテキストを認識するには、文字エンコードが必要です。そのため、一部の文字セットでは文字あたり 2 バイトを使用し、一部の文字セットでは文字あたり 3 バイトを使用します。

並べ替えルール: 例

utf_bin と utf_general_ci の違いは何ですか?

ci は case insensitive の略で、「大文字と小文字を区別しない」という意味です。a と A は文字判定では同じように扱われます。

bin はバイナリなので、a と A は異なる扱いになります。

utf8_general_ci は大文字と小文字を区別しないため、ユーザー名とメール アドレスを登録するときに使用する必要があります。

utf8_general_cs は大文字と小文字を区別します。ユーザー名とメールアドレスにこれを使用すると、悪影響が生じます。

utf8_bin: 文字列 各文字列はバイナリデータとして保存されます。大文字と小文字が区別され、バイナリ コンテンツを保存できます。

したがって、ソート規則では主に大文字と小文字を区別するかどうかと保存方法を記述します。

上記は私の個人的な経験です。参考になれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。間違いや不備な点がありましたら、遠慮なくご指摘ください。

以下もご興味があるかもしれません:
  • MySQL での utf8mb4 照合の例
  • MySQL 集計関数のソート
  • インデックススキャンを使用したMySQLソート
  • MySQL のあまり知られていないソート方法
  • Mysql 中国語ソートルールの説明
  • MySQL ソートの原則とケース分析
  • MySQLクエリのソートとページング関連
  • インデックスを使用して MySQL ORDER BY ステートメントを最適化する方法
  • MySQL のソートとページング (order by と limit) と既存の落とし穴
  • MySQL ソート機能の詳細

<<:  dockerコンテナにviコマンドをインストールする簡単な操作

>>:  HTMLノードの追加と削除の簡単な例

推薦する

Taobao ストアでズームインする効果は、スライドショーを使用する原理に似ています。

今日は、スライドを使用する原理に似た、Taobao のフロントエンドのマウス ズーム効果に慣れました...

Xshell にショートカット コマンドを追加する方法

便利なターミナル エミュレーターである Xshell は、開発者がホスト サーバーをリモート管理する...

CSS で 3D ルービック キューブを実装するサンプル コード

今日は簡単な3Dルービックキューブを作ってみましょうまずはレンダリングを見てみましょう!これを学んだ...

HTMLの基本概念の詳細な説明

HTMLとは何ですか? HTML は Web ページを記述するために使用される言語です。 •HTML...

内部 IP アクセスのみを許可する Nginx プロキシ設定を追加する方法

位置 / { インデックス index.jsp; proxy_next_upstream http...

純粋な CSS 実装 (スクリプトなし) HTML コマンド スタイルのツールチップ テキスト プロンプト効果

実行プロセスを分析します。マウスをノードに移動して、ノードにツールチップ実装を開くための識別子 (...

MySQL 5.7.21 解凍版のインストールと設定方法のグラフィックチュートリアル (win10)

MySQL 5.7.21 解凍版のインストールと設定方法は参考までに。具体的な内容は以下のとおりで...

HTML メタタグの小さなコレクション

<Head>……</head> は <HTML> のファイル ヘ...

ロンボク実装 JSR-269

序文導入Lombok は、Google Guava と同様に便利なツールであり、強くお勧めします。す...

GitHub のサードパーティ認証方式を Vue で実装する例

目次OAuth アプリの作成コードを取得するaccess_tokenを取得するユーザー情報を取得する...

JavaScript シングルスレッドと非同期の詳細

目次1. タスクキュー2. 混乱を招く問題を説明する1. setTimeout(f1,0)とは何です...

mysql zipファイルのインストールチュートリアル

この記事では、参考までにMySQL zipファイルをインストールする具体的な方法を紹介します。具体的...

MySQL例外に対する一般的な解決策をいくつか分析する

目次序文1. コードによって設定されたデータベース名またはパスワードがローカルデータベースと一致して...

Linux で FastDFS ファイル サーバーを構築するための実装手順

目次1. ソフトウェアパッケージ2. gccをインストールする3. libfastcommonをイン...

MySQL パーティション関数の詳細な説明と例の分析

まず、データベース パーティショニングとは何でしょうか?以前、MySQL のテーブル パーティショニ...