文字データ型は、データベースの文字セットまたは国際化文字セットにおいて、文字(英数字)データ、すなわち単語や自由形式のテキストを格納します。文字データ型は他のデータ型と比べて制約があるため、属性は少ないです。本記事では、OceanBaseデータベースの現行バージョンでサポートされているデータ型の概要と文字セットの紹介を主に提供します。
文字データ型の概要
文字データは文字列に格納され、そのバイト値はデータベース作成時に指定した文字セットの一つに対応しています。OceanBaseデータベースは、シングルバイトおよびマルチバイト文字セットをサポートしています。
説明
文字データ型の列はすべての英数字を格納できますが、NUMBER データ型の列は数値のみを格納できます。
OceanBaseデータベースの現行バージョンでサポートされているデータ型の詳細情報は、次の表のとおりです。
データ型 |
長さタイプ |
使用上の注意 |
長さの説明 |
|---|---|---|---|
| CHAR(size [BYTE | CHAR]) | 定長 | インデックス効率が高い。プログラム内では trim を使用して余分な空白を除去する。 |
パラメータ size の取り得る範囲は [1,2000] で、デフォルト値と最小値は 1 である。格納サイズは size バイトまたは文字である。 |
| NCHAR[(size)] | 定長 | UNICODE文字セットを使用する(すべての文字は2バイトで表現される)。 | パラメータ size の取り得る範囲は [1,2000] で、デフォルト値と最小値は 1 である。格納サイズは size バイトの2倍である。 |
| NVARCHAR2(size) | 可変長 | UNICODE文字セットを使用する(すべての文字は2バイトで表現される)。 | パラメータ size の取り得る範囲は [1,32767] である。バイト数は入力文字数の2倍である。 |
| VARCHAR2(size [BYTE | CHAR]) | 可変長 | UNICODE文字セットを使用する(すべての文字は2バイトで表現される)。 | パラメータ size の取り得る範囲は [1,32767] である。格納サイズは、入力データの実際のバイトまたは文字の長さであり、size バイトまたは文字ではない。 |
| VARCHAR(size [BYTE | CHAR]) | 可変長 | OceanBaseデータベースでは VARCHAR と VARCHAR2 に違いはない。 |
パラメータ size の取り得る範囲は [1,32767] である。格納サイズは、入力データの実際のバイト数であり、size バイトではない。 |
説明
CHAR と VARCHAR2 データ型では length セマンティクスを指定する必要があり、そのデフォルト値はシステム変数 NLS_LENGTH_SEMANTICS によって制御される。
文字セットの紹介
UNICODE文字セット
UNICODE文字セットは文字のエンコーディング方式の一つで、具体的なエンコーディング方式にはUTF-8、UTF-16、UTF-32、圧縮変換などがあります。エンコーディング方式によって文字の格納サイズが決まり、中国語と英語では異なるエンコーディング方式で異なる領域を使用します。
3種類のエンコーディング方式の比較情報は次の表のとおりです。
エンコーディング方式 |
エンコード文字数 |
BOM |
利点 |
欠点 |
|---|---|---|---|---|
| UTF-8 | 可変長エンコーディング方式。シングルバイト(ASCII文字)またはマルチバイト(非ASCII文字)。最小Code Unitは8ビット。 | バイトオーダーなし:テキストの先頭にEF BB BFのバイトストリームがある場合、UTF-8エンコーディングであることを示す。 | 最も理想的なUNICODEエンコーディング方式:ASCIIエンコーディングと完全に互換性がある。バイトオーダーがなく、自己同期と誤り訂正能力が強いため、ネットワーク伝送や通信に適している。拡張性も良好である。 | 可変長エンコーディング方式は、プログラム内部での処理には不利である。 |
| UTF-16 | ダブルバイトまたは4バイト。最小Code Unitは16ビット。 | バイトオーダーあり:UTF-16LE(リトルエンディアン)はFF FEで表され、UTF-16BE(ビッグエンディアン)はFE FFで表される。 | 最初のUnicodeエンコーディング方式で、多くの環境で利用されている。メモリ内のUnicode処理に適している。多くのプログラミング言語のAPIでSTRING型のエンコーディング方式として採用されている。 | ASCIIエンコーディングとの互換性がない。補完平面のコードポイントエンコードでは代理ペアを使用し、エンコードが複雑である。拡張性に欠ける。 |
| UTF-32 | 固定の4バイト。最小Code Unitは16ビット。 | バイトオーダーあり:UTF-16LE(リトルエンディアン)はFF FEで表され、UTF-16BE(ビッグエンディアン)はFE FFで表される。 | 固定バイトエンコードは読み取りが簡単で、プログラム内部で処理できる。UnicodeコードポイントとCode Unitは一対一で対応している。 | すべての文字が固定の4バイトでエンコードされるため、ストレージ容量と帯域幅が無駄になる。ASCIIエンコーディングと互換性がない。拡張性に欠ける。実際の使用は少ない。 |
データベース文字セット
データベース文字セットの用途は以下のとおりです:
CHAR、VARCHAR2、CLOBなどの型のデータを格納するために使用されます。テーブル名、列名、PL変数などを識別するために使用されます。
SQLやPLストレージユニットなどを格納するために使用されます。
ナショナル文字セット
ナショナル文字セットは、NCHAR、NVARCHAR2、NCLOB などの型のデータを格納するために使用されます。
ナショナル文字セットは、実質的にOceanBaseデータベースに追加で選択可能な文字セットであり、CHAR データ型が提供するデータベース文字セットだけでなく、NCHAR データ型を通じてナショナル文字セットも使用できるようにすることで、OceanBaseデータベースの文字処理能力を強化します。