文字型 - Amazon Redshift

文字型

文字データ型には、CHAR (文字) や VARCHAR (可変文字) などがあります。

ストレージと範囲

CHAR および VARCHAR のデータ型は、文字単位でなくバイト単位で定義されます。CHAR 列にはシングルバイト文字のみを含めることができます。したがって、CHAR(10) 列には、最大 10 バイト長の文字列を含めることができます。VARCHAR にはマルチバイト文字 (1 文字あたり最大で 4 バイトまで) を含めることができます。例えば、VARCHAR(12) 列には、シングルバイト文字なら 12 個、2 バイト文字なら 6 個、3 バイト文字なら 4 個、4 バイト文字なら 3 個含めることができます。

名前 ストレージ 範囲(列の幅)
CHAR、CHARACTER、NCHAR 文字列の長さ。末尾の空白を含む (存在する場合)。 4096 バイト
VARCHAR、CHARACTER VARYING、NVARCHAR 4 バイト + 文字の合計バイト数 (ここで、各文字は 1~4 バイト)。 65535 バイト (64K -1)
BPCHAR 固定長の CHAR(256) に変換されます。 256 バイト
TEXT VARCHAR(256) に変換されます。 260 バイト
注記

CREATE TABLE 構文では、文字データ型の MAX キーワードをサポートします。次に例を示します。

create table test(col1 varchar(max));

MAX 設定は列幅を定義します。CHAR の場合は 4096 バイトであり、VARCHAR の場合は 65535 となります。

CHAR または CHARACTER

固定長の文字列を格納するには、CHAR または CHARACTER を使用します。これらの文字列は空白で埋められるので、CHAR(10) 列は常に 10 バイトのストレージを占有します。

char(10)

長さの指定がない場合 CHAR 列は、CHAR(1) 列になります。

VARCHAR または CHARACTER VARYING

一定の制限を持つ可変長の文字列を格納するには、VARCHAR 列または CHARACTER VARYING 列を使用します。これらの文字列は空白で埋められないので、VARCHAR(120) 列は、最大で 120 個のシングルバイト文字、60 個の 2 バイト文字、40 個の 3 バイト文字、または 30 個の 4 バイト文字で構成されます。

varchar(120)

CREATE TABLE ステートメントで長さの指定子なしで VARCHAR データ型を使用すると、デフォルト長は 256 になります。式で使用する場合、出力のサイズは入力式 (最大 65535) を使用して決定されます。

NCHAR 型および NVARCHAR 型

NCHAR 型および NVARCHAR 型 (NATIONAL CHARACTER 型および NATIONAL CHARACTER VARYING 型と呼ぶこともある) で、列を作成できます。これらの型はそれぞれ CHAR 型と VARCHAR 型に変換され、指定されたバイト数で格納されます。

長さを指定しない場合、NCHAR 列は CHAR(1) 列に変換されます。

長さを指定しない場合、NVARCHAR 列は VARCHAR(256) 列に変換されます。

TEXT 型および BPCHAR 型

TEXT 列を使用して Amazon Redshift テーブルを作成できますが、この列は最大 256 文字の可変長値を受け入れる VARCHAR(256) 列に変換されます。

BPCHAR (空白で埋められる文字) 型を使用して Amazon Redshift 列を作成できますが、この列によって固定長の CHAR(256) 列に変換されます。

末尾の空白の重要性

CHAR と VARCHAR のデータ型は両方とも、最大 n バイト長の文字列を格納できます。それよりも長い文字列をこれらの型の列に格納しようとすると、エラーが発生します。ただし、余分な文字がすべてスペース (空白) ならば例外で、文字列は最大長に切り捨てられます。文字列の長さが最大長よりも短い場合、CHAR 値は空白で埋められますが、VARCHAR 値では空白なしで文字列を格納します。

CHAR 値の末尾の空白はいつも意味的に重要であるとは限りません。末尾の空白は、LENGTH 計算を含めないで 2 つの CHAR 値を比較するときは無視され、CHAR 値を別の文字列型に変換するときは削除されます。

VARCHAR および CHAR の値の末尾の空白は、値が比較されるとき、意味的に重要でないものとして扱われます。

長さの計算によって返される VARCHAR キャラクタ文字列の長さには末尾の空白が含められます。固定長のキャラクタ文字列の長さを計算する場合、末尾の空白はカウントされません。