我有大约2k的原始二进制数据需要存储在表中,但不知道是否选择Varbinary或Blob类型。我已经阅读了MySQL文档中的描述,但没有找到任何合同和比较描述。我还读到varbinary最多只支持255个字符,但我成功创建了一个varbinary(2048)字段,所以我有点困惑。
二进制数据不需要编入索引,也不需要查询。使用PHP中的另一种类型是否有优势?
谢谢!
答案 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)。