MySQLの文字セットと検証ルールの詳細な説明

MySQLの文字セットと検証ルールの詳細な説明

1いくつかの一般的な文字セット

MySQL で最も一般的な文字セットには、ASCII 文字セット、ラテン文字セット、GB2312 文字セット、GBK 文字セット、UTF8 文字セットなどがあります。これらの文字セットについて簡単に紹介します。

ASCII 文字セット

この文字セットは、エンコードに 1 バイトを使用します。1 バイトは 8 ビットで、合計 128 文字を格納できます。具体的な対応は次のとおりです。

ラテン文字セット

ラテン文字セットには合計 256 文字を保存できます。ASCII コードと比較すると、西ヨーロッパでよく使用される 128 文字が含まれています。

GB2312 文字セット

漢字、ラテン文字、ギリシャ文字などが含まれており、そのうち漢字が6763個と大半を占め、その他のテキスト記号は638個で、ASCII文字と互換性があります。 ASCII をエンコードする場合は 1 バイト、つまり 128 ビットを使用し、その他の文字をエンコードする場合は 2 バイトを使用します。辺長符号化方式であることが分かります。

GBK 文字セット

この文字セットは、GB2312 文字セットの拡張です。GB2312 文字セットと互換性があり、通常は 2 バイトを使用してエンコードされます。

UTF8 文字セット

通常、1〜4バイトでエンコードされます。使用されるバイトの違いにより、UTF8とutf8mb4に分けられます。mb4は最大4バイトを意味します。一般的に、UTF8はエンコードに3バイトを使用します。さらに、utf16とutf32があります。utf16は2バイトまたは4バイトを使用して文字をエンコードし、utf32は4バイトを使用して文字をエンコードします。

一部の絵文字表現は utf8mb4 を使用して表現する必要があることに注意してください。

2 MySQLでサポートされている文字セット

MySQL は多くの文字セットをサポートしています。ローカル文字セットを例にとると、show charset コマンドを使用して、現在のサーバーでサポートされている文字セットを表示します。結果は次のようになります。

[email protected]:(なし) 22:46:48>>文字セットを表示;
+----------+-----------------------------+----------------------+--------+
| 文字セット | 説明 | デフォルトの照合順序 | Maxlen |
+----------+-----------------------------+----------------------+--------+
| big5 | Big5 繁体字中国語 | big5_chinese_ci | 2 |
| dec8 | DEC 西ヨーロッパ | dec8_swedish_ci | 1 |
| cp850 | DOS 西ヨーロッパ | cp850_general_ci | 1 |
| hp8 | HP 西ヨーロッパ | hp8_english_ci | 1 |
| koi8r | KOI8-R Relcom ロシア語 | koi8r_general_ci | 1 |
| latin1 | cp1252 西ヨーロッパ語 | latin1_swedish_ci | 1 |
| latin2 | ISO 8859-2 中央ヨーロッパ | latin2_general_ci | 1 |
| swe7 | 7 ビット スウェーデン語 | swe7_swedish_ci | 1 |
| ascii | US ASCII | ascii_general_ci | 1 |
| ujis | EUC-JP 日本語 | ujis_japanese_ci | 3 |
| sjis | Shift-JIS 日本語 | sjis_japanese_ci | 2 |
| ヘブライ語 | ISO 8859-8 ヘブライ語 | hebrew_general_ci | 1 |
| tis620 | TIS620 タイ語 | tis620_thai_ci | 1 |
| euckr | EUC-KR 韓国語 | euckr_korean_ci | 2 |
| koi8u | KOI8-U ウクライナ語 | koi8u_general_ci | 1 |
| gb2312 | GB2312 簡体字中国語 | gb2312_chinese_ci | 2 |
| ギリシャ語 | ISO 8859-7 ギリシャ語 | greek_general_ci | 1 |
| cp1250 | Windows 中央ヨーロッパ | cp1250_general_ci | 1 |
| gbk | GBK 簡体字中国語 | gbk_chinese_ci | 2 |
| latin5 | ISO 8859-9 トルコ語 | latin5_turkish_ci | 1 |
| armscii8 | ARMSCII-8 アルメニア語 | armcii8_general_ci | 1 |
| utf8 | UTF-8 ユニコード | utf8_general_ci | 3 |
| ucs2 | UCS-2 ユニコード | ucs2_general_ci | 2 |
| cp866 | DOS ロシア語 | cp866_general_ci | 1 |
| keybcs2 | DOS カメニツキ チェコ語-スロバキア語 | keybcs2_general_ci | 1 |
| macce | Mac 中央ヨーロッパ | macce_general_ci | 1 |
| macroman | Mac 西ヨーロッパ | macroman_general_ci | 1 |
| cp852 | DOS 中央ヨーロッパ | cp852_general_ci | 1 |
| latin7 | ISO 8859-13 バルト語 | latin7_general_ci | 1 |
| utf8mb4 | UTF-8 ユニコード | utf8mb4_general_ci | 4 |
| cp1251 | Windows キリル文字 | cp1251_general_ci | 1 |
| utf16 | UTF-16 ユニコード | utf16_general_ci | 4 |
| cp1256 | Windows アラビア語 | cp1256_general_ci | 1 |
| cp1257 | Windows バルト語 | cp1257_general_ci | 1 |
| utf32 | UTF-32 ユニコード | utf32_general_ci | 4 |
| バイナリ | バイナリ疑似文字セット | バイナリ | 1 |
| geostd8 | GEOSTD8 グルジア語 | geostd8_general_ci | 1 |
| cp932 | Windows 日本語用 SJIS | cp932_japanese_ci | 2 |
| eucjpms | Windows 日本語用 UJIS | eucjpms_japanese_ci | 3 |
+----------+-----------------------------+----------------------+--------+
セット内の行数は 39 です (0.00 秒)

ご覧のとおり、合計 39 個の文字セットがサポートされています。もちろん、この数はバージョンによって異なります。これら 39 個の文字セットのうち、覚えておく必要がある主なものは次のとおりです。

+----------+-----------------------------+----------------------+--------+
| 文字セット | 説明 | デフォルトの照合順序 | Maxlen |
+----------+-----------------------------+----------------------+--------+
| latin1 | cp1252 西ヨーロッパ語 | latin1_swedish_ci | 1 |
| ascii | US ASCII | ascii_general_ci | 1 |
| gb2312 | GB2312 簡体字中国語 | gb2312_chinese_ci | 2 |
| gbk | GBK 簡体字中国語 | gbk_chinese_ci | 2 |
| utf8 | UTF-8 ユニコード | utf8_general_ci | 3 |
| utf8mb4 | UTF-8 ユニコード | utf8mb4_general_ci | 4 |
+----------+-----------------------------+----------------------+--------+

ここでは、最大長に含まれるバイト数のみを知る必要があります。

3 検証ルール

文字セットの検証ルールとは、文字セットのサイズを比較するときに使用される基準を指します。たとえば、a と B のサイズを比較する場合、大文字と小文字を区別しなければ、a<B となります。大文字と小文字を区別すれば、a>B となります。つまり、文字セットは同じでも比較ルールが異なると、データ列の並べ替え結果が異なります。

MySQL の文字検証ルールは、次のように show collat​​ion; 構文を使用して表示できます。

[email protected]:(なし) 23:00:36>>照合順序を表示;
+-----------------------+----------+-----+----------+----------+----------+
| 照合 | 文字セット | ID | デフォルト | コンパイル済み | ソート長 |
+-----------------------+----------+-----+----------+----------+----------+
| big5_chinese_ci | big5 | 1 | はい | はい | 1 |
| big5_bin | big5 | 84 | | はい | 1 |
| dec8_swedish_ci | dec8 | 3 | はい | はい | 1 |
| dec8_bin | dec8 | 69 | | はい | 1 |
...........
| koi8r_general_ci | koi8r | 7 | はい | はい | 1 |
| koi8r_bin | koi8r | 74 | | はい | 1 |
| latin1_german1_ci | latin1 | 5 | | はい | 1 |
| koi8u_general_ci | koi8u | 22 | はい | はい | 1 |
| utf8_general_ci | utf8 | 33 | はい | はい | 1 |
| utf8_bin | utf8 | 83 | | はい | 1 |
| utf8_unicode_ci | utf8 | 192 | | はい | 8 |
| utf8_icelandic_ci | utf8 | 193 | | はい | 8 |
| utf8_latvian_ci | utf8 | 194 | | はい | 8 |
| utf8_romanian_ci | utf8 | 195 | | はい | 8 |
| utf8_slovenian_ci | utf8 | 196 | | はい | 8 |
| utf8_polish_ci | utf8 | 197 | | はい | 8 |
| utf8_estonian_ci | utf8 | 198 | | はい | 8 |
+-----------------------+----------+-----+----------+----------+----------+
セット内の行数は 195 です (0.00 秒)

結果には合計 195 の比較ルールがあることがわかります。各文字セットには、独自のデフォルトの検証ルールが含まれています。1 つを簡単に説明します。utf8_polish_ci はポーランド語に基づいて比較します。この検証ルールは 3 つの部分で構成されます。比較ルール名は、それに関連付けられた文字セットの名前で始まります。utf8 は utf8 文字セットの比較ルールを指し、polish はポーランド語を指し、_ci は大文字と小文字を区別しないことを示します。

最後の接尾辞については、次のようにまとめることができます。

_aiはアクセントを区別しません

_asはアクセントを区別します

_ci 大文字と小文字を区別しない (insensitive) 大文字と小文字を区別しない

_cs 大文字と小文字を区別する (区別する) 大文字と小文字を区別する

_bin バイナリ

上記の結果では、いくつかの検証ルールのデフォルト列の値が yes になっていることもわかります。これは、この検証ルールが文字セットのデフォルトの検証ルールであることを意味します。

4 サーバー上の文字セットと比較規則

MySQL には、サーバー レベルの文字セットと比較ルールを表す 2 つのシステム変数が用意されています。1 つは character_set_sever、もう 1 つは collat​​ion_server です。それぞれのデフォルト値は次のように確認できます。

[email protected]:(なし) 23:12:28>>'character_set_server' のような変数を表示します。
+----------------------+-------+
| 変数名 | 値 |
+----------------------+-------+
| 文字セットサーバー | utf8 |
+----------------------+-------+
セット内の 1 行 (0.00 秒)

[email protected]:(なし) 23:12:47>>'collat​​ion_server' のような変数を表示します。
+------------------+-----------------+
| 変数名 | 値 |
+------------------+-----------------+
| 照合サーバー | utf8_general_ci |
+------------------+-----------------+
セット内の 1 行 (0.00 秒)

[email protected]:(なし) 23:12:57>>

MySQL では、文字セットと検証ルールは、サーバー レベル、データベース レベル、テーブル レベル、フィールド レベルの 4 つのレベルに分かれています。ここでは、それぞれ例を挙げて説明します。

データベース レベルmysql 23:23:48>>create database yyz character set utf8 collat​​e utf8_general_ci;
クエリは正常、1 行が影響を受けました (0.01 秒)

テーブルレベルmysql 23:24:23>>create table yyz.yyz (name varchar(10)) charset gb2312 collat​​e gb2312_chinese_ci;
クエリは正常、影響を受けた行は 0 行 (0.04 秒)

フィールドレベルmysql 23:27:06>>
[email protected]:(なし) 23:27:06>>alter table yyz.yyz add num varchar(10) charset gbk collat​​e gbk_chinese_ci;
クエリは正常、影響を受けた行は 0 行 (0.11 秒)
レコード: 0 重複: 0 警告: 0

結果を表示しますmysql 23:28:27>>show create table yyz.yyz;
+-------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| テーブル | テーブルの作成 |
+-------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| yyz | テーブル `yyz` を作成します (
 `name` varchar(10) デフォルト NULL,
 `num` varchar(10) 文字セット gbk デフォルト NULL
) エンジン=InnoDB デフォルト文字セット=gb2312 |
+-------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
セット内の 1 行 (0.00 秒)

文字セットと比較ルールは相互に関連しているため、文字セットのみを変更すると、比較ルールも変更されます。比較ルールのみを変更すると、文字セットも変更されます。具体的なルールは次のとおりです。

文字セットのみを変更すると、比較規則は変更された文字セットのデフォルトの比較規則になります。
比較規則のみを変更すると、文字セットは変更された比較規則に対応する文字セットになります。

覚えておくべきことがあと 4 つあります。

  • データベースの場合、データベースの作成および変更のステートメントに致命的な文字セットと比較規則がない場合、サーバー レベルの文字セットと比較規則がデータベースの文字セットと比較規則として使用されます。
  • テーブルの場合、テーブルの作成または変更のステートメントで文字セットと比較規則が指定されていない場合は、テーブルが配置されているデータベースの文字セットと比較規則がテーブルの文字セットと比較規則として使用されます。
  • 列の場合、作成ステートメントおよび変更ステートメントで文字セットと比較規則が指定されていない場合は、列が配置されているテーブルの文字セットと比較規則が、列の文字セットと比較規則として使用されます。
  • 文字列を格納する列の場合、同じテーブル内の異なる列に異なる文字セットと比較規則を設定できます。

以上がMySQLの文字セットと検証ルールの詳細な説明です。MySQLの文字セットと検証ルールの詳細については、123WORDPRESS.COMの他の関連記事に注目してください。

以下もご興味があるかもしれません:
  • MySQL 文字セットの表示と変更のチュートリアル
  • MySQLの文字セットを変更する方法
  • MySQL データベースの文字化け問題の原因と解決策
  • MySQL の文字セット utf8 を utf8mb4 に変更する方法
  • 既存のMySQLデータベースの文字セットを統一する方法
  • MySQL 文字セットの文字化けとその解決方法
  • MySQL utf8mb4 文字セットの JDBC 処理の詳細な説明
  • フィールドの文字セットの違いによる MySQL のインデックス失敗の解決策
  • MAC で MySQL のデフォルトの文字セットを utf8 に変更する方法
  • Docker で MySQL の文字セットを設定する方法
  • MySQLクエリの文字セットの不一致の問題を解決する方法

<<:  JavaScript継承のさまざまな方法とメリット・デメリットを詳しく解説

>>:  dns-prefetch とは何ですか? フロントエンドの最適化: DNS の事前解決によりページ速度が向上します

推薦する

ウェブレスポンシブレイアウトにおけるiframe適応の方法

問題<br />レスポンシブ レイアウトでは、iframe 要素に注意する必要があります...

シンプルなウェブデザインコンセプトのカラーマッチング

(I)ウェブページのカラーマッチングの基本概念(1)白黒の言葉は永遠のテーマです。誰もそれを悪く言う...

C++ を使用して MySQL に接続する方法

C++でMySQLに接続する際の参考情報です。具体的な内容は以下のとおりです。 MySQLCon ク...

Vueでデータ例を定義する方法

序文開発プロセスにおいて、変数の定義は非常に頻繁かつ基本的なタスクです。変数の使用シナリオと範囲に応...

MySQL の Like の概念と使用法の説明

Like は中国語で「好き」を意味しますが、MySQL データベースに適用される場合、Like は、...

Docker Alibaba Cloud RocketMQ 4.5.1 のデプロイプロセスの詳細な説明

検索ミラー docker 検索 rocketmq画像バージョンを表示他の画像を表示したい場合は、画像...

MySQL のユニークインデックスと通常のインデックスのどちらを選択すればよいでしょうか?

ユーザー テーブルを設計するときに、各人の ID 番号が一意であり、検索する必要があるシナリオを想像...

Firefox の CSS を使用してデータを盗む

0x00 はじめに数か月前、Firefox に脆弱性 (CVE-2019-17016) があること...

JavaScriptアニメーション関数のカプセル化の詳細な説明

目次1. アニメーション機能の原理2. アニメーション関数のシンプルなカプセル化3. アニメーション...

WeChatミニプログラムが星評価を実装

この記事では、WeChatアプレットで星評価を実装するための具体的なコードを参考までに紹介します。具...

最新のmysql-5.7.21のインストールと設定方法

1. ダウンロードしたMySQLの圧縮パッケージをインストールディレクトリに解凍します。 2. 新し...

JS を使用して配列内の要素の存在を 10 分で判断する

序文フロントエンド開発では、配列内に要素が存在するかどうかを判断する必要があることがよくあります。実...

MySQL サービスを起動できない問題の解決策を含む MySQL 5.7.17 インストール チュートリアル

.net 開発に関しては、Microsoft の SQL Server データベースに精通しており、...

ES9の新機能の詳細な説明: 非同期反復

目次非同期トラバーサル非同期反復可能トラバーサル非同期反復生成非同期メソッドと非同期ジェネレーター非...

MySQL は低速クエリを可能にします (EXPLAIN SQL ステートメントの使用の概要)

今日、データベース操作はますますアプリケーション全体のパフォーマンスのボトルネックになりつつあり、こ...