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ノードの追加と削除の簡単な例

推薦する

Xiaomi公式サイトの登録・ログイン機能を模倣するJavaScript

目次まずページレイアウトを構築する必要がありますJS関数1 JS関数2 JS関数3 JS関数4効果図...

SQL GROUP BYの詳細な説明と簡単な例

GROUP BY ステートメントは、Aggregate 関数と組み合わせて使用​​され、1 つ以上の...

Linux での MySQL 8.0.11 のインストールに関するチュートリアル

1. 公式サイトにアクセスしてインストールパッケージをダウンロードしますダウンロードリンク: クリッ...

JS で CSS 変数を使用する方法

JS で CSS 変数を使用する方法:export キーワードを使用して、js オブジェクトを le...

Ubuntu 基本チュートリアル: apt-get コマンド

序文apt-get コマンドは、Ubuntu システムのパッケージ管理ツールです。パッケージのインス...

js キャンバスは検証コードを実装し、検証コード機能を取得します

この記事の例では、検証コードを作成して取得するためのjsキャンバスの具体的なコードを共有しています。...

CSS3は光る境界線効果を実現します

操作効果: html <!-- この要素は表示されません。DOM は JavaScript に...

CSS ワールド - コード実践: 画像の Alt 情報の表示

ただし、デフォルトの src を持つ <img> 要素を使用してスクロール読み込み効果を...

JDBC および MySQL 一時テーブルスペースの詳細な分析

背景一時テーブルスペースは、データベースのソート操作を管理し、一時テーブルや中間ソート結果などの一時...

Node.js パッケージ マネージャー npm の具体的な使用方法

目次目的npm init および package.json ファイルモジュールのインストールと管理モ...

nginx リバース プロキシの魔法のスラッシュについての簡単な説明

nginx リバース プロキシを設定する場合、location と proxy_pass のスラッシ...

ウェブページ上の写真プレビューナビゲーションを設計するためのヒント

<br />ナビゲーションとは、ウェブサイトの上部にあることが多いナビゲーション バーの...

JavaScript は 3 つの一般的な Web 効果 (オフセット、クライアント、スクロール シリーズ) を実装します。

目次1. 要素オフセットシリーズ2. 要素表示領域クライアントシリーズ3. 要素スクロールシリーズ1...

MySQL 構成マスタースレーブサーバー (マスター 1 台とスレーブ複数台)

目次アイデアホスト構成confを変更する再起動テストスレーブ 1 の構成スレーブ2の構成マスターとス...

Vue の一般的な問題と解決策の概要 (推奨)

Vue に限定されず、他の種類の SPA プロジェクトにも当てはまる問題がいくつかあります。 1....