MySQL 8.0 リファレンスマニュアル MySQL NDB Cluster 8.0 を含む

このページは機械翻訳したものです。

11.3.4 BLOB 型と TEXT 型

BLOB はさまざまな容量のデータを保持できる大きなバイナリオブジェクトです。 BLOB 型は、TINYBLOBBLOBMEDIUMBLOB、および LONGBLOB の 4 つがあります。 これらの違いは、保持できる値の最大長だけです。 TEXT 型は、TINYTEXTTEXTMEDIUMTEXT、および LONGTEXT の 4 つがあります。 これらは 4 つの BLOB 型に対応し、最大長とストレージ要件は同じです。 セクション11.7「データ型のストレージ要件」を参照してください。

BLOB 値はバイナリ文字列 (バイトの文字列) として扱われます。 これらには binary 文字セットと照合順序があり、比較とソートはカラム値のバイトの数値に基づきます。 TEXT 値は非バイナリ文字列 (文字の文字列) として扱われます。 これらには binary 以外の文字セットがあり、値は文字セットの照合に基づいてソートおよび比較されます。

厳密な SQL モードが有効でない場合に、BLOB または TEXT カラムにその最大長を超える値を割り当てると、その値はカラムの最大長に合わせて切り捨てられ、警告メッセージが表示されます。 スペース以外の文字の切り捨てに関しては、厳密な SQL モードを使用することで、警告ではなくエラーを発生させて、その値の挿入を抑制できます。 セクション5.1.11「サーバー SQL モード」を参照してください。

TEXT カラムに挿入される値から、超過した末尾のスペースを切り捨てると、SQL モードには関係なく、常に警告が生成されます。

TEXT および BLOB カラムでは、挿入時にパディングは行われず、選択時にバイトは削除されません。

TEXT カラムにインデックスが設定されている場合、インデックスエントリの比較では末尾がスペースで埋められます。 つまり、インデックスに一意の値が必要な場合は、末尾のスペースの数のみが異なる値に対して重複キーエラーが発生します。 たとえば、テーブルに 'a' が含まれている場合、'a ' を格納しようとすると、重複キーエラーが発生します。 これは BLOB カラムには当てはまりません。

ほとんどの点で、BLOB カラムを、任意の長さに設定できる VARBINARY カラムと見なすことができます。 同様に、TEXT カラムを VARCHAR カラムと見なすことができます。 BLOBTEXT は、次の点で VARBINARYVARCHAR とは異なっています。

BINARY 属性を TEXT データ型とともに使用する場合、カラムにはカラム文字セットのバイナリ (_bin) 照合順序が割り当てられます。

LONGLONG VARCHARMEDIUMTEXT データ型にマップします。 これは互換性機能です。

MySQL Connector/ODBC は BLOB 値を LONGVARBINARY として、TEXT 値を LONGVARCHAR として定義します。

BLOB 値と TEXT 値は非常に長くなる可能性があるので、使用するときに次の制約が生じることがあります。

BLOB 値または TEXT 値はそれぞれ、別々に割り当てられたオブジェクトによって内部的に表現されます。 これは、テーブルが開かれるときにカラムごとに一度ストレージが割り当てられる、ほかのすべてのデータ型と対照的です。

メディアファイルなどのバイナリデータを BLOB または TEXT カラムに格納するほうがよい場合もあります。 このようなデータの処理には、MySQL の文字列操作関数が役立つことがあります。 セクション12.8「文字列関数および演算子」を参照してください。 セキュリティーなどの理由のために、通常は、アプリケーションユーザーに FILE 権限を与えるのではなく、アプリケーションコードを使用して実行することをお勧めします。 MySQL フォーラム (http://forums.mysql.com/) では、さまざまな言語やプラットフォームの詳細について話し合うことができます。