BLOB 型は、可変長のデータを格納できる、大きなバイナリオブジェクトです。TINYBLOB、BLOB、MEDIUMBLOB、LONGBLOB の 4 つの BLOB 型では、格納可能な値の最大長のみが異なります。
TINYTEXT、TEXT、MEDIUMTEXT、LONGTEXT の 4 つの TEXT 型は、4 つの BLOB 型に対応しており、最大長と記憶容量がそれぞれの BLOB 型と同じです。BLOB 型と TEXT 型の唯一の違いは、ソートと比較が、BLOB 値ではケース依存方式で行われ、 TEXT 値ではケース非依存方式で行われる点です。つまり、TEXT 型は大文字と小文字を区別しない BLOB 型と考えることができます。格納時や取り出し時に、ケースの変換処理は行われません。
BLOB 型または TEXT 型のカラムにそのカラム型の最大長を超える値を割り当てると、カラムのサイズに合わせて値が切り捨てられます。
ほとんどの面において、TEXT 型のカラムは、任意の長さに設定できる VARCHAR 型のカラムとみなすことができます。同様に、BLOB 型のカラムについては、VARCHAR BINARY 型のカラムとみなすことができます。相違点は以下のとおりです。
バージョン 4.1.0 以降では、LONG 型と LONG VARCHAR 型は MEDIUMTEXT データ型にマップされます。これは互換性を考慮した機能です。
MyODBC では、BLOB 型の値は LONGVARBINARY として定義され、TEXT 型の値は LONGVARCHAR として定義されます。
BLOB 型と TEXT 型の値は極度に長くなることがあるため、これらの値の使用時には、次に示す一定の制約が適用されます。
GROUP BY または ORDER BY を BLOB 型または TEXT 型のカラムに使用する場合、カラムの値を固定長のオブジェクトに変換する必要がある。標準的な変換方法としては、次のように、SUBSTRING 関数を使用する。
mysql> SELECT comment FROM tbl_name,SUBSTRING(comment,20) AS substr
-> ORDER BY substr;
この変換を行わないと、ソート時にカラムの最初の max_sort_length バイトだけが使用される。max_sort_length のデフォルト値は 1024。この値は、mysqld サーバの起動時に -O オプションを指定することによって変更可能。次に示すように、カラムの位置を指定するか、エイリアスを使用することによって、BLOB 型または TEXT 型の値を含む式に対してグループ化操作を行うことができる。
mysql> SELECT id,SUBSTRING(blob_col,1,100) FROM tbl_name GROUP BY 2; mysql> SELECT id,SUBSTRING(blob_col,1,100) AS b FROM tbl_name GROUP BY b;
BLOB 型または TEXT 型オブジェクトの最大サイズは、その型によって決まるが、クライアントとサーバ間で実際に送信できる最大値は使用可能なメモリ量と通信バッファのサイズで決まる。メッセージバッファのサイズ(max_allowed_packet)は変更できるが、サーバ側とクライアント側の両方で変更を行う必要がある。 See 項5.5.2. 「サーバパラメータのチューニング」。
注意: BLOB 型または TEXT 型のそれぞれの値は、内部で、個別に割り当てられたオブジェクトとして表現されます。これは他のすべてのカラム型と異なります。他のカラム型では、テーブルが開かれたときに、カラムごとに 1 度だけ記憶領域が割り当てられます。