文字型は、数字やアルファベットなどの文字を文字列として格納します。このセクションでは、主に最も一般的に使用される文字データ型、すなわちCHAR型とVARCHAR型、およびBINARY型とVARBINARY型について説明します。
CHAR型とVARCHAR型
CHAR型とVARCHAR型は似ていますが、ストレージと取得の方法、および末尾のスペースの処理方法が異なります。
CHAR型とVARCHAR型はどちらも最大長を指定できます。例えば、CHAR(30)は最大30文字を格納できます。
CHAR型の列で指定可能な長さの範囲は0〜256です。CHAR型は、書き込まれた値の末尾に連続するスペースを除去してから格納します。取得時にPAD_CHAR_TO_FULL_LENGTH SQLモードが有効な場合、取得した値を最大長までスペースで補完します。
VARCHAR型の列で指定可能な長さの範囲は0〜262144です。有効な最大長は262144バイトです。
CHAR型とVARCHAR型では、挿入するデータの長さが最大長を超えた場合、sql_modeにSTRICT_TRANS_TABLES設定が含まれているとエラーが発生し、含まれていない場合は自動的に最大長まで切り捨てて警告が表示されます。
VARCHAR型とCHAR型を格納する際の比較方法は、照合順序の設定に基づきます。
BINARY型とVARBINARY型
BINARY型とVARBINARY型はCHAR型とVARCHAR型に似ていますが、バイナリデータを格納する点が異なります。
BINARY型とVARBINARY型の最大長はCHAR型とVARCHAR型と同じですが、長さはバイト単位で計算されます。
BINARY型を格納する際、格納対象の値の右側に0x00(すなわち‘\0’)が追加され、最大長に調整されます。
厳密モードが有効な場合、最大長を超えるデータの挿入はエラーとなります。非厳密モードの場合は、データが切り捨てられて警告が表示されます。
BINARY型の比較では、末尾の空バイトが明示的に比較されます。0x00はスペースとは異なり、0x00はスペースよりも前に並べ替えられます。