文字データ型は、データベースの文字セットまたは国別文字セットにおいて、文字(英数字)データ、すなわち単語や自由形式のテキストを格納します。文字データ型は他のデータ型と比較して制限が多く、そのためプロパティも少ないです。本記事では、OceanBaseデータベースの現行バージョンでサポートされているデータ型の概要と文字セットの紹介を主に提供します。
文字データ型の概要
文字データは文字列に格納され、そのバイト値はデータベース作成時に指定した文字セットのいずれかに対応します。OceanBaseデータベースは、1バイトおよび複数バイトの文字セットをサポートしています。
説明
文字データ型の列はすべての英数字値を格納できますが、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文字)を使用します。最小コードユニットは8ビットです。 | バイトオーダーなし:テキストの先頭にEF BB BFというバイトストリームがある場合、UTF-8エンコーディングであることを示します。 | 非常に理想的なUNICODEエンコーディング方式:ASCIIエンコーディングと完全に互換性あり;バイトオーダーなし;自己同期および誤り訂正能力に優れ、ネットワーク転送や通信に適しています;拡張性に優れています。 | 可変長エンコーディング方式はプログラム内部処理には向いていません。 |
| UTF-16 | 2バイトまたは4バイト;最小コードユニットは16ビットです。 | バイトオーダーあり:UTF-16LE(リトルエンディアン)はFF FEで表され、UTF-16BE(ビッグエンディアン)はFE FFで表されます。 | 最も初期のUnicodeエンコーディング方式で、多くの環境で利用されています;メモリ内のUnicode処理に適しています;多くのプログラミング言語のAPIでSTRING型のエンコーディング方式として採用されています。 | ASCIIエンコーディングとの互換性がありません;追加平面のコードポイントエンコーディングではプロキシペアを使用し、エンコーディングが複雑です;拡張性に劣ります。 |
| UTF-32 | 固定4バイト;最小コードユニットは16ビットです。 | バイトオーダーあり:UTF-16LE(リトルエンディアン)はFF FEで表され、UTF-16BE(ビッグエンディアン)はFE FFで表されます。 | 固定バイトエンコーディングは読み取りが簡単で、コンパイル済みプログラム内部処理に適しています;Unicodeコードポイントとコードユニットは一対一の対応関係にあります。 | すべての文字が固定4バイトでエンコードされるため、ストレージ容量と帯域幅を無駄にします;ASCIIエンコーディングと互換性がありません;拡張性に劣ります;実際の使用は少ないです。 |
データベース文字セット
データベース文字セットの使用方法は以下のとおりです:
CHAR、VARCHAR2、CLOBなどの型のデータを格納するために使用されます。テーブル名、列名、PL変数などを識別するために使用されます。
SQLやPLストレージユニットなどを格納するために使用されます。
ナショナル文字セット
ナショナル文字セットは、NCHAR、NVARCHAR2、NCLOB などの型のデータを格納するために使用されます。
ナショナル文字セットとは、実質的にOceanBaseデータベースに追加される文字セットであり、CHARデータ型が提供するデータベース文字セットだけでなく、NCHARデータ型を通じてナショナル文字セットも使用できるようにすることで、OceanBaseデータベースの文字処理能力を強化します。