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

推薦する

Dockerfile を使用して nginx イメージを構築する例

Dockerfile の紹介Docker は、Dockerfile の内容を読み取ってイメージを自動...

docker で Apollo をデプロイする詳細なチュートリアル

1. はじめにここでは apollo について詳しく説明しません。公式サイト https://git...

Linuxシステムはルートアカウントのリモートログインコマンドを禁止しています

ps: Linux システムで root アカウントのリモート ログインを無効にする方法は次のとおり...

よく使われる HTML タグとその特徴の完全なリスト

まず、HTML タグのいくつかの特性を知っておく必要があります。 1. 「<keyword&g...

HTML入門チュートリアル HTMLタグ記号をすぐにマスター

補足<br />HTML について何も知らず、HTML の始め方がまだわからない場合は、...

CSS の div の下の同じ行にある複数の要素を右揃えにする

方法1:フロート:右さらに、フローティングにするとレイアウトがよりコンパクトになります(隙間がなくな...

Postman に基づく HTTP インターフェース テスト プロセスの分析

偶然、素晴らしい人工知能のチュートリアルを発見したので、みんなと共有せずにはいられませんでした。この...

HTML CSS JS はタブページのサンプルコードを実装します

コードをコピーコードは次のとおりです。 <html xmlns="">...

Vue+nodeはオーディオ録音・再生機能を実現

結果: コードロジックを実装するのが主な部分であり、具体的なページ構造を一つ一つ紹介することはありま...

JavaScript の条件付きアクセス属性と矢印関数の紹介

目次1. 条件付きアクセス属性2. アロー関数の紹介1. 条件付きアクセス属性?. は ES2020...

Ubuntu 18.04 に mysql5.7.23 をインストールするチュートリアル

この記事では、Ubuntu18.04にmysql5.7.23をインストールする具体的な方法を参考まで...

MySQL の遅いクエリ操作の例の分析 [有効化、テスト、確認など]

この記事では、MySQL のスロー クエリ操作について例を挙げて説明します。ご参考までに、詳細は以下...

Element-ui レイアウト (行と列コンポーネント) の実装

目次基本的な手順と使用方法行コンポーネントの分析レンダリング機能ソースコード分析Col成分の分析コン...

MySQL5.7 シングルインスタンス自動起動サービスの設定プロセス

1.MySQLのバージョン [root@clq システム]# mysql -v MySQL モニター...