CHAR型とVARCHAR型は似ていますが、格納と検索の方法、最大長、および末尾のスペースを保持するかどうかが異なります。
CHAR
CHAR型で宣言された長さは、格納できる最大文字数です。例えば、CHAR(30)は最大30文字を収容できることを意味します。
構文は次のとおりです:
[NATIONAL] CHAR[(M)] [CHARACTER SET charset_name] [COLLATE collation_name]
CHARACTER SETは文字セットを指定するために使用されます。必要に応じて、COLLATE属性やその他の属性を使用して、文字セットの照合順序を指定できます。CHARACTER SETのバイナリ属性を指定すると、列は対応するバイナリ文字列データ型として作成され、CHARはBINARYに変わります。
CHAR列の長さは0から256の値を指定できます。CHAR値を格納する際、指定された長さまで空白で右詰めされます。
CHAR列では、SQLモードに関係なく、挿入値の余分な末尾のスペースはサイレントクリッピングされます。PAD_CHAR_TO_FULL_LENGTH SQLモードが有効でない場合、CHAR値を検索する際に末尾のスペースは削除されます。
VARCHAR
VARCHAR型で宣言された長さMは、格納できる最大文字数です。例えば、VARCHAR(50)は最大50文字を収容できることを意味します。
構文は次のとおりです:
[NATIONAL] VARCHAR(M) [CHARACTER SET charset_name] [COLLATE collation_name]
CHARACTER SETは文字セットを指定するために使用されます。必要に応じて、COLLATE属性やその他の属性を使用して、文字セットの照合順序を指定できます。CHARACTER SETのバイナリ属性を指定すると、列は対応するバイナリ文字列データ型として作成され、VARCHARはVARBINARYに変わります。
VARCHAR列の長さは0から262144の値を指定できます。
CHARと比較して、VARCHAR値は1バイトまたは2バイトの長さプレフィックスとデータの形式で格納されます。長さプレフィックスは値のバイト数を表します。値が255バイト以下の場合、この列は1文字分を占有します。値が255バイトを超える可能性がある場合、2文字分を占有します。
VARCHAR列では、SQLモードに関係なく、列の長さを超える末尾のスペースは挿入前に切り捨てられ、警告が生成されます。
VARCHAR値は格納時にパディングされません。標準SQLによると、値の格納と検索時には末尾のスペースが保持されます。
また、OceanBaseデータベースは拡張型CHARACTER VARYING(m)もサポートしていますが、VARCHAR(m)の使用を推奨します。