web-dev-qa-db-ja.com

MySQLのVarbinaryとBlob

テーブルに保存する必要のある生のバイナリデータが約2kありますが、VarbinaryとBlobのどちらのタイプを選択するかわかりません。 MySQLドキュメントの説明を読みましたが、契約が見つかりませんでした。説明を比較しませんでした。また、varbinaryは255文字までしかサポートしていないことも読みましたが、varbinary(2048)フィールドを正常に作成したため、少し混乱しています。

バイナリデータにインデックスを付ける必要はなく、クエリを実行する必要もありません。 PHPから他のタイプよりも1つのタイプを使用する利点はありますか?

ありがとう!

25
Jimmyb

VARBINARYは、MySQL 5.0.2以下では255バイトに、5.0.3以降では65kBにバインドされています。

BLOBは65kBにバインドされています。

最終的に、「古い」バージョンのMySQLとの互換性を維持したくない場合を除いて、VARBINARYは実質的にBLOBと同じです(何を格納できるかという観点から)。 MySQLドキュメント はこう言っています:

ほとんどの点で、BLOB列は、好きなだけ大きくできるVARBINARY列と見なすことができます。

19
Romain

実際、ブロブは大きくなる可能性があります(tinyblob、blob、mediumblob、longblobがあります http://dev.mysql.com/doc/refman/5.0/en/storage-requirements.html )最大2サイズ制限で^ 32 -1。

また、BLOBストレージは行の「外側」に拡大しますが、varbinaryの最大サイズは、利用可能な空き行のサイズによって制限されます(そのため、実際には64 KB未満になる場合があります)。

両方の間にいくつかの小さな違いがあります

1)インデックススクリプティング(ブロブはインデックスにプレフィックスサイズが必要ですが、varbinaryは必要ありません)http:/en/column-indexes.html
CREATE TABLEテスト(blob_col BLOB、INDEX(blob_col(10)));

2)すでに述べたように、MySql 5.0.x以前のバージョンでは、varbinaryとblobの間で異なる方法で管理されている末尾のスペースの問題があります。http:///en/blob.html http:///en/binary-varbinary.html

(stackoverflowはスパムが多すぎるリンクと見なすため、リンクを切り捨てます)

大きな違いの1つは、BLOB型がセカンダリストレージに格納されるのに対し、varbinariesはvarcharやその他の「単純な」型と同じ方法で行にインラインで格納されることです。

これは、blobデータをフェッチして操作するための追加のルックアップが高価になる可能性があるビジーシステムでパフォーマンスに影響を与える可能性があります。

11
Foobarista

メモリストレージエンジンはBLOB/TEXTをサポートしていませんが、VARBINARYで動作することを指摘しておく価値があります。

5
matt

列に約5kのバイナリデータを格納するテストアプリを見ているだけです。最初はvarbinaryを使用していましたが、非常に遅いため、blobを試すことにしました。さて、私は上でディスクの書き込み速度を調べていますが、違いはわかりません。

私がmysqlマニュアルで読んだ唯一の重要な違いは、ブロブはメモリエンジンでサポートされていないため、クエリで作成した一時テーブル( mysqlが一時テーブルを使用する場合 を参照)がディスク上に作成され、それがはるかに遅い。したがって、行に収まるほど短い場合はvarbinary/binaryに賭けるほうがよい(現時点では、すべての列で合計64k)。

0
akostadinov