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