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 に変換し、正常に実行されます */
obclient > SELECT * FROM t1 WHERE c = '字';
+------+
| C |
+------+
| 字 |
+------+
1 row in set