GBK

q
s
O
s
t

TiDBはv5.4.0以降、GBK文字セットをサポートしています。このドキュメントでは、TiDBのGBK文字セットのサポートと互換性に関する情報を提供します。

TiDB v6.0.0以降、デフォルトで照合のための新しいフレームワーク有効になります。TiDB GBK文字セットのデフォルトの照合順序はgbk_chinese_ciで、これはMySQLと一致しています。

SHOW CHARACTER SET WHERE CHARSET = 'gbk'; +---------+-------------------------------------+-------------------+--------+ | Charset | Description | Default collation | Maxlen | +---------+-------------------------------------+-------------------+--------+ | gbk | Chinese Internal Code Specification | gbk_chinese_ci | 2 | +---------+-------------------------------------+-------------------+--------+ 1 row in set (0.00 sec) SHOW COLLATION WHERE CHARSET = 'gbk'; +----------------+---------+------+---------+----------+---------+ | Collation | Charset | Id | Default | Compiled | Sortlen | +----------------+---------+------+---------+----------+---------+ | gbk_bin | gbk | 87 | | Yes | 1 | | gbk_chinese_ci | gbk | 28 | Yes | Yes | 1 | +----------------+---------+------+---------+----------+---------+ 2 rows in set (0.00 sec)

MySQLの互換性

このセクションでは、MySQL と TiDB 間の互換性に関する情報を提供します。

照合順序

MySQLにおけるGBK文字セットのデフォルトの照合順序はgbk_chinese_ciです。TiDBにおけるGBK文字セットのデフォルトの照合順序は、TiDB設定項目new_collations_enabled_on_first_bootstrapの値によって異なります。

さらに、TiDB は GBK をutf8mb4に変換してからバイナリ照合順序を使用するため、TiDB のgbk_bin照合順序は MySQL のgbk_bin照合順序と同じではありません。

不正な文字の互換性

  • システム変数character_set_clientcharacter_set_connection同時にgbkに設定されていない場合、TiDB は MySQL と同じ方法で不正な文字を処理します。

  • character_set_clientcharacter_set_connection両方がgbkに設定されている場合、TiDB は不正な文字を MySQL とは異なる方法で処理します。

    • MySQL は、読み取り操作と書き込み操作で不正な GBK 文字セットを異なる方法で処理します。
    • TiDBは、読み取り操作と書き込み操作において、不正なGBK文字セットを同じ方法で処理します。SQL厳密モードでは、不正なGBK文字の読み取りまたは書き込み時にエラーが報告されます。非厳密モードでは、不正なGBK文字の読み取りまたは書き込み時に、TiDBは不正なGBK文字を?に置き換えます。

例えば、 SET NAMES gbk後、MySQL と TiDB でそれぞれCREATE TABLE gbk_table(a VARCHAR(32) CHARACTER SET gbk)ステートメントを使用してテーブルを作成し、次の表の SQL ステートメントを実行すると、詳細な違いを確認できます。

データベース設定されたSQLモードにSTRICT_ALL_TABLESまたはSTRICT_TRANS_TABLES含まれている場合設定されたSQLモードにSTRICT_ALL_TABLESSTRICT_TRANS_TABLESも含まれていない場合
MySQLSELECT HEX('一a');
e4b88061

INSERT INTO gbk_table values('一a');
Incorrect Error
SELECT HEX('一a');
e4b88061

INSERT INTO gbk_table VALUES('一a');
SELECT HEX(a) FROM gbk_table;
e4b8
TiDBSELECT HEX('一a');
Incorrect Error

INSERT INTO gbk_table VALUES('一a');
Incorrect Error
SELECT HEX('一a');
e4b83f

INSERT INTO gbk_table VALUES('一a');
SELECT HEX(a) FROM gbk_table;
e4b83f

上記の表では、 utf8mb4バイト セットのSELECT HEX('a');の結果はe4b88061なります。

その他のMySQL互換性

  • 現在、TiDB は、 ALTER TABLEステートメントを使用して他の文字セット タイプをgbkに変換したり、 gbkを他の文字セット タイプに変換したりすることはサポートしていません。
  • TiDBは_gbkの使用をサポートしていません。例:

    CREATE TABLE t(a CHAR(10) CHARSET BINARY); Query OK, 0 rows affected (0.00 sec) INSERT INTO t VALUES (_gbk'啊'); ERROR 1115 (42000): Unsupported character introducer: 'gbk'
  • 現在、 ENUMおよびSETタイプのバイナリ文字については、TiDB はutf8mb4文字セットとして処理します。

コンポーネントの互換性

  • 現在、 TiFlash はGBK 文字セットをサポートしていません。

  • TiDB データ移行 (DM) では、v5.4.0 より前の TiDB クラスターへのcharset=GBKテーブルの移行はサポートされていません。

  • TiDB Lightning は、v5.4.0 より前の TiDB クラスターへのcharset=GBKテーブルのインポートをサポートしていません。

  • TiCDCバージョン6.1.0より前のバージョンでは、 charset=GBKテーブルのレプリケーションはサポートされていません。TiCDCのバージョン6.1.0より前のバージョンでは、TiDBクラスターへのcharset=GBKテーブルのレプリケーションはサポートされていません。

  • バックアップ&リストア(BR)バージョン5.4.0より前のバージョンでは、 charset=GBKテーブルのリカバリはサポートされていません。また、 BRのバージョン5.4.0より前のバージョンでは、TiDBクラスターへのcharset=GBKテーブルのリカバリはサポートされていません。

このページは役に立ちましたか?