文字型は、数字やアルファベットなどの文字を文字列として格納します。このセクションでは、最も一般的に使用される文字データ型について説明します。
文字列内のバイトシーケンスは、特定の文字エンコーディング方式を使用しており、この文字エンコーディング方式は通常文字セットと呼ばれます。データベースが使用する文字セットは、テナント作成時に指定されます。例えば、UTF8やGBKなどの文字セットがあります。
文字型には、一般的に長さの意味、バイトの意味、文字の意味が含まれます。文字型の長さの意味は、文字列の長さをどのように測定するかを定義しており、バイト数または文字数に基づいています。バイトの意味は、文字列をバイトシーケンスとして処理することであり、これは文字型のデフォルトの選択です。文字の意味は、文字列を文字シーケンスとして扱うことであり、文字シーケンス内の文字はデータベースの文字セットにおけるコードポイントに対応します。
VARCHAR2とCHAR型
データベースにおいて、最も一般的に使用される文字データ型はVARCHAR2であり、これは最も効率的なストレージ方式でもあります。VARCHAR2型は、長さが不定の文字列定数を格納します。例えば、'LILA'、'St. George Island'、'101'はすべて文字列定数であり、それぞれの長さが異なります。数値定数(例えば5001)とは異なり、文字列定数は一重引用符で囲まれているため、データベースは両者を区別できます。
テーブルを作成してVARCHAR2列を含める場合、ユーザーはVARCHAR2型が文字列を格納できる最大長を定義できます。例えば、VARCHAR2(25)は最大25バイトを格納できることを意味します。
各行について、データベースは列内の異なる長さの値を格納できますが、データの長さが列定義の最大長を超えるとエラーが報告されます。文字セットがUTF8で最大長が25の列に10文字を挿入する場合、列に格納される文字数は25ではなく10となります。そのため、VARCHAR2を使用することでストレージ容量の消費を削減できます。対照的に、CHARは固定長の文字列を格納し、デフォルトの定義長は1バイトです。実際の長さが型定義の長さより短い場合、データベースは定義された長さになるように、スペースを使用してデータを補完します。
OceanBaseデータベースのOracleモードでVARCHAR2型を比較する場合、補完されたスペースを除いたモードで比較されます。一方、CHAR型を比較する場合は、スペースが補完されたモードで比較されます。
NCHARとNVARCHAR2型
NCHARとNVARCHAR2型は、Unicode文字データを格納するために使用されます。
Unicodeは汎用的な文字セットであり、一つの文字セットであらゆる言語の文字を格納できます。NCHARは固定長の文字列を格納するために使用され、NVARCHAR2は可変長の文字列を格納するために使用されます。それらが使用する文字セットは国家文字セット(National Character Set)であり、国家文字セットはテナント作成時に設定できます。国家文字セットは、ユーザーの現地特有の文字を格納するために使用できます。標準を統一するため、国家文字セットはUnicodeエンコーディングに基づく文字セットのみを使用できます。例えば、AL16UTF16文字セットやUTF8文字セットなどです。
ユーザーがNCHARまたはNVARCHAR2の列を含むテーブルを作成する場合、それらが格納する文字は常に文字の意味に従います。