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 の事前解決によりページ速度が向上します

推薦する

WindowsとLinux間でファイルを転送する方法

WindowsとLinux間のファイル転送(1)WinSCPを使用して、WindowsファイルをLi...

WeChatアプレットは記録機能を実装します

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

vue.config.js からプロジェクト最適化までの vue2.x 構成

目次序文vue.config.js 構成オプションパッケージサイズを縮小するためのパッケージの最適化...

404エラーページを作成する際に注意すべき問題の簡単な分析

ウェブサイトを最適化するときは、エラー ページの使い方を学ぶ必要があります。たとえば、ウェブサイトに...

Vue elementUI フォームのネストされたテーブルと各行の検証の詳細な説明

目次エフェクト表示コードリンクキーコード表形式データコンポーネントのネスト検証方法リセット方法完全な...

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

docker コンテナを使用する場合、vim がインストールされていないことがあり、vim コマンド...

Vueモバイル端末は画面上で指をスライドさせる方向を判定する

vueモバイル端末は、画面上で指をスライドさせる方向を判断します。具体的な内容は次のとおりです。これ...

Linux における「!」の知られざる使用法のまとめ

序文実際、Linux では、控えめな「!」が驚くほど多くの用途で使用されています。この記事では、「!...

Docker インストール Nginx チュートリアル 実装図

Nginx をインストールして試してみましょう。画像はクラスであり、コンテナはオブジェクトであること...

Vueプロジェクトでvuexを使用する方法

目次Vuex とは何ですか? Vuex 使用サイクル図私のストアディレクトリvuexの例の実装要約す...

主キーを追加または変更するMySQL SQL文操作

テーブルフィールドを追加する テーブルtable1を変更し、トランザクタvarchar(10)をNu...

LINUX ポートが占有されているかどうかを確認します

ポートが占有されているかどうかは、これまで一度もわかりませんでした。多くの人に尋ねて、ようやくわかり...

JavaScriptの知識ポイントの詳しい説明

目次1. JavaScriptの基礎2. 基本的なJavaScript構文3. JavaScript...

jsのディープコピーを理解しましょう

目次js ディープコピーデータ保存方法浅いコピー/深いコピーとは何か一般的なディープコピーの実装1....

ダウンロードにおすすめの氷と雪のフォント 33 種類 (個人用および商用)

01 ウィンターフレーク(個人のみ) 02 スノートップキャップ(業務用) 03 モディウス「フリ...