文字型は、数字やアルファベットなどの文字を文字列として格納します。このセクションでは、最も一般的に使用される文字データ型について説明します。
文字列内のバイト列は、特定の文字エンコーディング方式を使用しており、このエンコーディング方式は通常、文字セットと呼ばれます。データベースで使用する文字セットは、テナント作成時に指定されます。例えば、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の列を含むテーブルを作成すると、格納される文字は常に文字の意味に従います。