文字列型は、数字やアルファベットなどの文字を文字列として格納します。この記事では、主に最も一般的に使用される文字データ型について説明します。これには、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はスペースよりも先にソートされます。