OceanBaseデータベースのデフォルトの文字セットはutf8mb4です。
OceanBaseデータベースは現在、以下の文字セットをサポートしています:
binarygbkgb18030utf16utf8mb4/utf8mb3説明
- シームレスな移行をサポートするため、OceanBaseデータベースでは構文上、
UTF8をUTF8MB4のシノニムと見なします。 utf8mb3はutf8mb4のエイリアスです。
- シームレスな移行をサポートするため、OceanBaseデータベースでは構文上、
latin1gb2312gb18030_2022asciitis620ujiseuckreucjpmscp932utf16lesjisdec8hkscshkscs31big5cp850hp8macromanswe7
説明
OceanBaseデータベースV4.3.5では、V4.3.5 BP1バージョンから文字セットがサポートされています:gb2312、ujis、euckr、eucjpms、cp932、cp850、hp8、macromanおよびswe7。
OceanBaseデータベースの現行バージョンでは、gb18030とgb18030_2022の暗黙的な変換はサポートされていませんが、ユーザーはCONVERTを使用してgb18030文字列の文字セットを明示的にgb18030_2022に変換できます。この変換はUnicodeを経由せず、エンコーディングを保持する方法を採用しています。以下の例では、‘龴’のエンコーディングは変換前後で0xFE59となっており、変化はありません。
obclient [(none)]> SELECT HEX(CONVERT(_gb18030 0xFE59 USING gb18030_2022)), HEX(CONVERT(_gb18030_2022 0xFE59 USING gb18030));
実行結果は次のとおりです:
+--------------------------------------------------+--------------------------------------------------+
| HEX(CONVERT(_gb18030 0xFE59 USING gb18030_2022)) | HEX(CONVERT(_gb18030_2022 0xFE59 USING gb18030)) |
+--------------------------------------------------+--------------------------------------------------+
| FE59 | FE59 |
+--------------------------------------------------+--------------------------------------------------+
1 row in set
利用可能な文字セットの確認
以下の SHOW CHARSET ステートメントを使用して、利用可能な文字セットを確認してください。
obclient [(none)]> SHOW CHARSET;
実行結果は次のとおりです:
+--------------+---------------------------+-------------------------+--------+
| Charset | Description | Default collation | Maxlen |
+--------------+---------------------------+-------------------------+--------+
| binary | Binary pseudo charset | binary | 1 |
| utf8mb4 | UTF-8 Unicode | utf8mb4_general_ci | 4 |
| gbk | GBK charset | gbk_chinese_ci | 2 |
| utf16 | UTF-16 Unicode | utf16_general_ci | 4 |
| gb18030 | GB18030 charset | gb18030_chinese_ci | 4 |
| latin1 | cp1252 West European | latin1_swedish_ci | 1 |
| gb2312 | GB2312 Simplified Chinese | gb2312_chinese_ci | 2 |
| gb18030_2022 | GB18030-2022 charset | gb18030_2022_chinese_ci | 4 |
| ascii | US ASCII | ascii_general_ci | 1 |
| tis620 | TIS620 Thai | tis620_thai_ci | 1 |
| ujis | EUC-JP Japanese | ujis_japanese_ci | 3 |
| euckr | EUC-KR Korean | euckr_korean_ci | 2 |
| eucjpms | UJIS for Windows Japanese | eucjpms_japanese_ci | 3 |
| cp932 | SJIS for Windows Japanese | cp932_japanese_ci | 2 |
| utf16le | UTF-16LE Unicode | utf16le_general_ci | 4 |
| sjis | SJIS | sjis_japanese_ci | 2 |
| big5 | BIG5 | big5_chinese_ci | 2 |
| hkscs | HKSCS | hkscs_bin | 2 |
| hkscs31 | HKSCS-ISO UNICODE 31 | hkscs31_bin | 2 |
| dec8 | DEC West European | dec8_swedish_ci | 1 |
| cp850 | DOS West European | cp850_general_ci | 1 |
| hp8 | HP West European | hp8_english_ci | 1 |
| macroman | Mac West European | macroman_general_ci | 1 |
| swe7 | 7bit West European | swe7_swedish_ci | 1 |
+--------------+---------------------------+-------------------------+--------+
24 rows in set
デフォルト以外の文字セットを指定する
OceanBaseデータベースは、サーバーとの通信においてデフォルト以外の文字セットを指定できます。例えば、gbk 文字セットを使用する場合、サーバーに接続した後に以下のステートメントを実行します:
SET NAMES gbk;
注意が必要な点として、SET NAMES ステートメントはクライアントが入力する文字のエンコーディングを変更しません。例えば、SET NAMES を使用してクライアントのエンコーディングを gb18030_2022 に設定するためには、クライアントが既に gb18030_2022 エンコーディングを使用していることが前提です。そうでない場合、文字化けが発生します。
/* クライアントはutf8mb4文字セットを使用し、デフォルトでutf8mb4文字セットのテーブルtを作成しました */
obclient> CREATE TABLE t(c VARCHAR(100));
Query OK, 0 rows affected
/* utf8mb4エンコーディングの文字を挿入しました */
obclient> INSERT INTO t VALUES ('文字セット');
Query OK, 1 row affected
/* 現在のセッションの文字セットを変更しましたが、クライアントが実際に使用する文字セットは変更されませんでした */
obclient> SET NAMES gb18030_2022;
Query OK, 0 rows affected
/* 依然としてutf8mb4エンコーディングを使用して文字を挿入します */
obclient> INSERT INTO t VALUES ('文字セット');
Query OK, 1 row affected
/* テーブルtのデータを照会すると、文字化けが発生します */
obclient> SELECT * FROM t;
+----------+
| c |
+----------+
| �ַ��� |
| 字符� |
+----------+
2 rows in set
/* 現在のセッションの文字セットをutf8mb4に変更します */
obclient> SET NAMES utf8mb4;
Query OK, 0 rows affected
/* 再度テーブルtのデータを照会すると、2回目に挿入した文字は依然として文字化けです */
obclient> SELECT * FROM t;
+--------------+
| c |
+--------------+
| 字符集 |
| 瀛楃闆 |
+--------------+
2 rows in set