MySQL中的Varbinary vs Blob

时间:2011-12-12 15:52:03

标签: mysql binary blob

我有大约2k的原始二进制数据需要存储在表中,但不知道是否选择Varbinary或Blob类型。我已经阅读了MySQL文档中的描述,但没有找到任何合同和比较描述。我还读到varbinary最多只支持255个字符,但我成功创建了一个varbinary(2048)字段,所以我有点困惑。

二进制数据不需要编入索引,也不需要查询。使用PHP中的另一种类型是否有优势?

谢谢!

5 个答案:

答案 0 :(得分:17)

VARBINARY在MySQL 5.0.2及更低版本上绑定为255个字节,在5.0.3及更高版本上绑定为65kB。

BLOB绑定到65kB。

最终,VARBINARY实际上与BLOB相同(从可以存储在其中的角度来看),除非您希望保持与“旧”MySQL版本的兼容性。 MySQL Documentation说:

  

在大多数方面,您可以将BLOB列视为VARBINARY列,可以根据您的喜好选择。{/ p>

答案 1 :(得分:14)

实际上blob可能更大(有tinyblob,blob,mediumblob和longblob http://dev.mysql.com/doc/refman/5.0/en/storage-requirements.html),最大尺寸限制为2 ^ 32 -1。

blob存储也会在行的“外部”增长,而max varbinary大小则与可用的自由行大小相关(因此它实际上可能小于64Kb)。

两者之间存在一些细微差别

  

1)使用索引脚本(blob需要索引的前缀大小,   varbinary没有)http:/en/column-indexes.html
  CREATE TABLE测试(blob_col BLOB,INDEX(blob_col(10)));

     

2)如前所述,管理的营销空间问题   varbinary&在MySql 5.0.x或更早版本的blob   版本:http:///en/blob.html   HTTP:///en/binary-varbinary.html

(截断链接,因为stackoverflow认为太多链接是垃圾邮件)

答案 2 :(得分:11)

一个显着的区别是blob类型存储在二级存储中,而varbinaries以与varchars和其他“简单”类型相同的方式内联存储在行中。

这会对繁忙系统中的性能产生影响,其中获取和操作blob数据的额外查找可能很昂贵。

答案 3 :(得分:5)

值得指出的是,内存存储引擎不支持BLOB / TEXT,但它适用于VARBINARY。

答案 4 :(得分:0)

我只是在看一个测试应用程序,它在一列中存储大约5k个二进制数据。它最初使用varbinary,但由于它太慢,我决定尝试使用blob。好吧,我正在看顶部的磁盘写入速度,看不出任何差异。

我在mysql手册中读到的唯一重要区别是内存引擎不支持blob,因此您在查询时创建的任何临时表(请参见mysql uses temp tables)将在磁盘上创建并且速度要慢得多。 所以你最好选择varbinary / binary,如果它足够短以适合一行(目前所有列总共64k)。

相关问题