OceanBaseデータベースのOracleモードでは、現在以下の文字セットをサポートしています:
binary
utf8mb4
説明
シームレスな移行をサポートするため、OceanBaseデータベースは構文上、
UTF8をUTF8MB4のシノニムと見なします。gbk
utf16
gb18030
latin1
gb2312
gb18030_2022
ascii
tis620
ujis
euckr
eucjpms
cp932
utf16le
sjis
hkscs
hkscs31
dec8
big5
説明
big5文字セットは、MySQLbig5文字セットに対応しています。cp850
hp8
macroman
swe7
説明
OceanBaseデータベースV4.3.5では、V4.3.5 BP1バージョンから以下の文字セットがサポートされます:gb2312、ujis、euckr、eucjpms、cp932、cp850、hp8、macroman および swe7。
適用対象
OceanBase Connector/Jは、現在 utf8mb4_unicode_ci および utf16_unicode_ci をサポートしていません。
OceanBaseデータベースのOracleモードで現在サポートされている照合順序は、以下の表のとおりです。
| 照合順序 | 所属文字セット | 説明 |
|---|---|---|
| utf8mb4_general_ci | utf8mb4 | 汎用的なソートルールを使用します。 |
| utf8mb4_bin | utf8mb4 | バイナリソートルールを使用します。 |
| utf8mb4_unicode_ci | utf8mb4 | Unicode照合アルゴリズム(UCA)に基づくソートルールを使用します。 |
| binary | binary | バイナリソートルールを使用します。 |
| gbk_chinese_ci | gbk | 中国語の言語ソートルールを使用します。 |
| gbk_bin | gbk | バイナリソートルールを使用します。 |
| utf16_general_ci | utf16 | 汎用的なソートルールを使用します。 |
| utf16_bin | utf16 | バイナリソートルールを使用します。 |
| utf16_unicode_ci | utf16 | Unicode照合アルゴリズム(UCA)に基づくソートルールを使用します。 |
| gb18030_chinese_ci | gb18030 | 中国語の言語ソートルールを使用します。 |
| gb18030_bin | gb18030 | バイナリソートルールを使用します。 |
| latin1_swedish_ci | latin1 | スウェーデン語/フィンランド語のソートルールを使用します。 |
| latin1_german1_ci | latin1 | ドイツ語(German)環境におけるlatin1文字セットのソートルールを使用します。 |
| latin1_danish_ci | latin1 | デンマーク語(Danish)環境におけるlatin1文字セットのソートルールを使用します。 |
| latin1_german2_ci | latin1 | ドイツ語環境で、辞書順による文字比較が必要なシナリオに適しています。 |
| latin1_general_ci | latin1 | 大文字と小文字を区別せず、アクセント記号をサポートするシナリオ、例えば一部のヨーロッパ言語のデータベース設計に使用されます。 |
| latin1_general_cs | latin1 | 大文字と小文字を区別する汎用的なソートルールで、複数の言語(西ヨーロッパ言語など)をサポートします。 |
| latin1_spanish_ci | latin1 | スペイン語(Spanish)環境のソートルールを使用します。 |
| latin1_bin | latin1 | latin1はバイナリソートルールを使用します。 |
| gb18030_2022_bin | gb18030_2022 | バイナリソートルールを使用します。Oracleモードではこの文字セットのデフォルトの照合順序です。 |
| gb18030_2022_chinese_ci | gb18030_2022 | ピンインソートルールを使用します。大文字と小文字を区別しません。 |
| gb18030_2022_chinese_cs | gb18030_2022 | ピンインソートルールを使用します。大文字と小文字を区別します。 |
| gb18030_2022_radical_ci | gb18030_2022 | 部首と筆順に基づくソートルールを使用します。大文字と小文字を区別しません。 |
| gb18030_2022_radical_cs | gb18030_2022 | 部首と筆順に基づくソートルールを使用します。大文字と小文字を区別します。 |
| gb18030_2022_stroke_ci | gb18030_2022 | 筆順に基づくソートルールを使用します。大文字と小文字を区別しません。 |
| gb18030_2022_stroke_cs | gb18030_2022 | 筆順でソートします。大文字と小文字を区別します。 |
| ascii_bin | ascii | 検索規則はバイナリビット比較に基づいています。文字をバイナリデータとして比較およびソートします。 |
| ascii_general_ci | ascii | 検索規則はアルファベットに基づく大文字と小文字を区別しないソート規則です。文字の大文字と小文字の違いを無視し、大文字と小文字を同一の文字として扱います。 |
| tis620_bin | tis620 | バイナリソート規則を使用します。 |
| tis620_thai_ci | tis620 | タイ語ソート規則を使用し、大文字と小文字を区別しません。 |
| gb2312_chinese_ci | gb2312 | GB2312文字セットを使用し、中国語ソート規則に従って大文字と小文字を区別しないソートを行います。
説明OceanBaseデータベースV4.3.5では、V4.3.5 BP1以降のバージョンからこの照合順序がサポートされます。 |
| gb2312_bin | gb2312 | GB2312文字セットを使用し、バイナリ順序に従って大文字と小文字を区別するソートを行います。
説明OceanBaseデータベースV4.3.5では、V4.3.5 BP1以降のバージョンからこの照合順序がサポートされます。 |
| ujis_japanese_ci | ujis | UJIS文字セットを使用し、日本語ソート規則に従って大文字と小文字を区別しないソートを行います。
説明OceanBaseデータベースV4.3.5では、V4.3.5 BP1以降のバージョンからこの照合順序がサポートされます。 |
| ujis_bin | ujis | UJIS文字セットを使用し、バイナリ順序に従って大文字と小文字を区別するソートを行います。
説明OceanBaseデータベースV4.3.5では、V4.3.5 BP1以降のバージョンからこの照合順序がサポートされます。 |
| euckr_korean_ci | euckr | EUCKR文字セットを使用し、韓国語ソート規則に従って大文字と小文字を区別しないソートを行います。
説明OceanBaseデータベースV4.3.5では、V4.3.5 BP1以降のバージョンからこの照合順序がサポートされます。 |
| euckr_bin | euckr | EUCKR文字セットを使用し、バイナリ順序に従って大文字と小文字を区別するソートを行います。
説明OceanBaseデータベースV4.3.5では、V4.3.5 BP1以降のバージョンからこの照合順序がサポートされます。 |
| eucjpms_japanese_ci | eucjpms | EUCJPMS文字セットを使用し、日本語ソート規則に従って大文字と小文字を区別しないソートを行います。
説明OceanBaseデータベースV4.3.5では、V4.3.5 BP1以降のバージョンからこの照合順序がサポートされます。 |
| eucjpms_bin | eucjpms | EUCJPMS文字セットを使用し、バイナリ順序に従って大文字と小文字を区別するソートを行います。
説明OceanBaseデータベースV4.3.5では、V4.3.5 BP1以降のバージョンからこの照合順序がサポートされます。 |
| cp932_japanese_ci | cp932 | CP932文字セットを使用し、日本語のソートルールに従って大文字と小文字を区別しないソートを行います。
説明OceanBaseデータベースV4.3.5バージョンでは、V4.3.5 BP1バージョンからこの照合順序がサポートされています。 |
| cp932_bin | cp932 | CP932文字セットを使用し、バイナリ順序に従って大文字と小文字を区別するソートを行います。
説明OceanBaseデータベースV4.3.5バージョンでは、V4.3.5 BP1バージョンからこの照合順序がサポートされています。 |
| cp850_general_ci | cp850 | CP850文字セットを使用し、一般的なソートルールに従って大文字と小文字を区別しないソートを行います。
説明OceanBaseデータベースV4.3.5バージョンでは、V4.3.5 BP1バージョンからこの照合順序がサポートされています。 |
| cp850_bin | cp850 | CP850文字セットを使用し、バイナリ順序に従って大文字と小文字を区別するソートを行います。
説明OceanBaseデータベースV4.3.5バージョンでは、V4.3.5 BP1バージョンからこの照合順序がサポートされています。 |
| hp8_english_ci | hp8 | HP8文字セットを使用し、英語のソートルールに従って大文字と小文字を区別しないソートを行います。
説明OceanBaseデータベースV4.3.5バージョンでは、V4.3.5 BP1バージョンからこの照合順序がサポートされています。 |
| hp8_bin | hp8 | HP8文字セットを使用し、バイナリ順序に従って大文字と小文字を区別するソートを行います。
説明OceanBaseデータベースV4.3.5バージョンでは、V4.3.5 BP1バージョンからこの照合順序がサポートされています。 |
| macroman_general_ci | macroman | MacRoman文字セットを使用し、一般的なソートルールに従って大文字と小文字を区別しないソートを行います。
説明OceanBaseデータベースV4.3.5バージョンでは、V4.3.5 BP1バージョンからこの照合順序がサポートされています。 |
| macroman_bin | macroman | MacRoman文字セットを使用し、バイナリ順序に従って大文字と小文字を区別するソートを行います。
説明OceanBaseデータベースV4.3.5バージョンでは、V4.3.5 BP1バージョンからこの照合順序がサポートされています。 |
| swe7_swedish_ci | swe7 | SWE7文字セットを使用し、スウェーデン語のソートルールに従って大文字と小文字を区別しないソートを行います。
説明OceanBaseデータベースV4.3.5バージョンでは、V4.3.5 BP1バージョンからこの照合順序がサポートされています。 |
| swe7_bin | swe7 | SWE7文字セットを使用し、バイナリ順序に従って大文字と小文字を区別するソートを行います。
説明OceanBaseデータベースV4.3.5バージョンでは、V4.3.5 BP1バージョンからこの照合順序がサポートされています。 |
OceanBaseデータベースのOracleモードでは、システムビュー NLS_DATABASE_PARAMETERS を使用して、nls_sort 変数に対応するシステムソートルール、nls_nchar_characterset 変数に対応するデータベースのデフォルト文字セット(NCHAR、NVARCHAR2、NCLOB などのデータ型に使用)、nls_characterset に対応するデータベース内の CHAR、VARCHAR2、CLOB などのデータ型のデフォルト文字セットを確認できます。
obclient> SELECT * FROM NLS_DATABASE_PARAMETERS;
+-------------------------+------------------------------+
| PARAMETER | VALUE |
+-------------------------+------------------------------+
| NLS_DATE_FORMAT | DD-MON-RR |
| NLS_TIMESTAMP_FORMAT | DD-MON-RR HH.MI.SSXFF AM |
| NLS_TIMESTAMP_TZ_FORMAT | DD-MON-RR HH.MI.SSXFF AM TZR |
| NLS_TERRITORY | AMERICA |
| NLS_SORT | BINARY |
| NLS_COMP | BINARY |
| NLS_CHARACTERSET | AL32UTF8 |
| NLS_NCHAR_CHARACTERSET | AL16UTF16 |
| NLS_DATE_LANGUAGE | AMERICAN |
| NLS_LENGTH_SEMANTICS | BYTE |
| NLS_NCHAR_CONV_EXCP | FALSE |
| NLS_CALENDAR | GREGORIAN |
| NLS_NUMERIC_CHARACTERS | ., |
| NLS_CURRENCY | $ |
| NLS_ISO_CURRENCY | AMERICA |
| NLS_DUAL_CURRENCY | $ |
+-------------------------+------------------------------+
16 rows in set
OceanBaseデータベースは、デフォルト以外の文字セットを指定してサーバーと通信することをサポートしています。例えば、gbk 文字セットを使用する場合、サーバーに接続した後に次のステートメントを実行します:
obclient> SET NAMES gbk;
Query OK, 0 rows affected
OceanBaseデータベースのOracleモードでは、文字セットのデフォルトのソート方式は bin ですが、NLSSORT() 関数を使用して他のソート方式を指定できます。
obclient> CREATE TABLE t(a VARCHAR(10));
Query OK, 0 rows affected
obclient> INSERT INTO t VALUES ('a'),('A'),('b'),('B'),('闖'),('闯'),('門'),('醜'),('錫'),('陸'),('ζ');
Query OK, 11 rows affected
Records: 11 Duplicates: 0 Warnings: 0
obclient> SELECT a,NLSSORT(a, 'NLS_SORT=SCHINESE_PINYIN2_M' ) FROM t ORDER BY NLSSORT(a, 'NLS_SORT=SCHINESE_PINYIN2_M' );
+------+------------------------------------------+
| A | NLSSORT(A,'NLS_SORT=SCHINESE_PINYIN2_M') |
+------+------------------------------------------+
| A | 41 |
| B | 42 |
| a | 61 |
| b | 62 |
| ζ | A6C6 |
| 醜 | FFA01016 |
| 闯 | FFA01156 |
| 闖 | FFA0115E |
| 陆 | FFA04E35 |
| 门 | FFA052DB |
| 锌 | FFA08A0F |
+------+------------------------------------------+
11 rows in set
gb18030とgb18030_2022間の変換
OceanBaseデータベースの現行バージョンでは、gb18030 と gb18030_2022 の暗黙的な変換はサポートされていませんが、ユーザーは CONVERT を使用して gb18030 文字セットの文字列を明示的に gb18030_2022 に変換できます。この変換はUnicodeを経由せず、エンコーディングを保持する方法を採用しています。以下の例を参照してください。
obclient> CREATE TABLE t1 (c1 VARCHAR(10));
Query OK, 0 rows affected
obclient> INSERT INTO t1 VALUES ('字');
Query OK, 1 row affected
obclient> SELECT RAWTOHEX(c1), RAWTOHEX(CONVERT(c1, 'ZHS32GB18030_2022')) FROM t1;
+--------------+-------------------------------------------+
| RAWTOHEX(C1) | RAWTOHEX(CONVERT(C1,'ZHS32GB18030_2022')) |
+--------------+-------------------------------------------+
| D7D6 | D7D6 |
+--------------+-------------------------------------------+
1 row in set
OceanBaseデータベースのOracleモードでは、文字セットはテナントレベルであるため、gb18030_2022 文字セットを使用するテナント内のすべてのユーザーテーブルの CHAR、VARCHAR2、CLOB フィールドは gb18030_2022 文字セットであり、すべてバイナリソート(gb18030_2022_bin)されます。Oracleモードでは、文字列定数は解析時にテナント文字セットに変換され、SQLの文字セットを統一します。
/* gb18030_2022テナントでは、列cの文字セットはgb18030_2022、照合順序はgb18030_2022_binです */
obclient> CREATE TABLE t1(c VARCHAR(100));
Query OK, 0 rows affected
obclient> INSERT INTO t1 values('字');
Query OK, 1 row affected
/* クライアント文字セットをgb18030に設定 */
obclient> SET NAMES gb18030;
Query OK, 0 rows affected
/* SQLは解析時に文字列'字'をgb18030_2022に変換し、SQLは正常に実行され、エラーは報告されません */
obclient > SELECT * FROM t1 WHERE c = '字';
+------+
| C |
+------+
| 字 |
+------+
1 row in set