文字データ型は、データベースの文字セットまたは国際文字セットを使用して、文字(英字と数字)データ、すなわち単語や自由形式のテキストを格納します。文字データ型は他のデータ型と比較して制約が多いため、属性も限られています。本記事では、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や圧縮変換などがあります。符号化方式によって文字の格納サイズが決まり、中国語と英語では異なる格納方式で異なる領域を使用します。
三つの符号化方式の比較情報は以下の表のとおりです。
エンコーディング方式 |
エンコードバイト数 |
BOM |
利点 |
欠点 |
|---|---|---|---|---|
| UTF-8 | 可変長エンコーディング方式。1バイト(ASCII文字)または複数バイト(非ASCII文字)。最小Code Unitは8ビット。 | バイトオーダーなし:テキストの先頭にEF BB BFのバイトストリームがある場合、UTF-8エンコードであることを示します。 | 非常に理想的なUNICODEエンコーディング方式:ASCIIエンコードと完全に互換性があり、バイトオーダーがなく、自己同期と誤り訂正能力が強いため、ネットワーク伝送や通信に適しており、拡張性も良好です。 | 可変長エンコーディング方式は、プログラム内部での処理には向きません。 |
| UTF-16 | 2バイトまたは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データベースの文字処理能力を強化します。