CHAR
型と VARCHAR
型は似ていますが、格納および取り出しの方法が異なります。
CHAR
型のカラムの長さは、テーブルの作成時に宣言した長さに固定されます。この長さとして、1
〜 255
の任意の値を指定することができます(MySQL
バージョン 3.23 以降では、CHAR
型の長さとして、0 〜 255
が可能)。CHAR
型の値は、格納時に、指定された長さになるよう右側にスペースが埋め込まれます。CHAR
値の取り出し時には、後続のスペースが削除されます。
VARCHAR
型のカラムの値は可変長の文字列です。VARCHAR
カラムは、CHAR
カラム同様、1 〜
255
の間の任意の長さとして宣言することができます。しかし、CHAR
型の値とは異なり、VARCHAR
型の値は、必要な文字と、長さを記録するための
1
バイトのみで格納されます。値に埋め込み処理が行われることはありません。値の格納時、後続のスペースは削除されます(このスペースの削除は
SQL-99
の仕様と異なります)。格納時や取り出し時に、ケースの変換処理は行われません。
CHAR
型または
VARCHAR
型のカラムに、そのカラムの最大長を超える値を割り当てると、カラムのサイズに合わせて値が切り捨てられます。
次の表に、さまざまな文字列値を
CHAR(4)
型と
VARCHAR(4)
型のカラムを格納したときの結果に基づく、これらのカラム型の違いについて示します。
値 | CHAR(4) |
必要な記憶容量 | VARCHAR(4) |
必要な記憶容量 |
'' |
' ' |
4 バイト | '' |
1 バイト |
'ab' |
'ab ' |
4 バイト | 'ab' |
3 バイト |
'abcd' |
'abcd' |
4 バイト | 'abcd' |
5 バイト |
'abcdefgh' |
'abcd' |
4 バイト | 'abcd' |
5 バイト |
CHAR
型のカラムでは、値の取り出し時に後続のスペースが削除されるため、CHAR(4)
型と VARCHAR(4)
型から取り出した値はそれぞれの場合で変わりません。
CHAR
型と VARCHAR
型のカラム値のソートと比較は、テーブルの作成時に
BINARY
属性が指定されている場合を除いて、ケース非依存方式で行われます。BINARY
属性は、カラム値のソートと比較を、MySQL
サーバが稼動しているマシンの ASCII
順に従って、ケース依存方式で行うことを表します。BINARY
属性はカラムの格納方法と取り出し方法には影響しません。
バージョン 4.1.0 以降では、カラム型
CHAR BYTE
が CHAR
BINARY
として使用されます。これは互換性を考慮した機能です。
BINARY
属性は強固な属性です。BINARY
として設定したカラムを式で使用すると、その式全体が
BINARY
値として比較されます。
MySQL では、CHAR
型や
VARCHAR
型のカラムの型が、テーブルの作成時に暗黙的に変更される場合があります。
See 項6.5.3.1. 「カラムの暗黙的な変更」。
This is a translation of the MySQL Reference Manual that can be found at dev.mysql.com. The original Reference Manual is in English, and this translation is not necessarily as up to date as the English version.