Sql server SQL Server 2008 R2 Varbinary最大大小
在SQL Server 2008 R2中,我可以使用varbinary(max)插入的文件的最大大小是多少?我试图将列中的最大值更改为8000字节以上,但它不允许,因此我猜测最大值为8000字节,但从中,它表示最大存储大小为2^31-1字节: varbinary[(n|max)] 可变长度二进制数据。n可以是1到8000之间的值max表示最大存储大小为2^31-1字节。存储大小是输入的数据的实际长度+2字节。输入的数据长度可以是0字节。varbinary的ANSI SQL同义词是二进制变量 那么,如何在varbinary字段中存储较大的文件呢?我没有考虑使用FILESTREAM,因为我要保存的文件最大为200kb到1mb,我使用的代码是:Sql server SQL Server 2008 R2 Varbinary最大大小,sql-server,sql-server-2008,sql-server-2008-r2,varbinary,varbinarymax,Sql Server,Sql Server 2008,Sql Server 2008 R2,Varbinary,Varbinarymax,在SQL Server 2008 R2中,我可以使用varbinary(max)插入的文件的最大大小是多少?我试图将列中的最大值更改为8000字节以上,但它不允许,因此我猜测最大值为8000字节,但从中,它表示最大存储大小为2^31-1字节: varbinary[(n|max)] 可变长度二进制数据。n可以是1到8000之间的值max表示最大存储大小为2^31-1字节。存储大小是输入的数据的实际长度+2字节。输入的数据长度可以是0字节。varbinary的ANSI SQL同义词是二进制变量 那么
UPDATE [table]
SET file = ( SELECT * FROM OPENROWSET ( BULK 'C:\A directory\A file.ext', SINGLE BLOB) alias)
WHERE idRow = 1
我已经能够成功地对小于或等于8000字节的文件执行该代码。如果我尝试使用8001字节大小的文件,它将失败。我在表上的文件字段有一个名为“file”type
varbinary(8000)
的字段,正如我所说的,我不能将其更改为更大的值。我无法重现这种情况。我尝试了以下方法:
USE tempdb;
GO
CREATE TABLE dbo.blob(col VARBINARY(MAX));
INSERT dbo.blob(col) SELECT NULL;
UPDATE dbo.blob
SET col = (SELECT BulkColumn
FROM OPENROWSET( BULK 'C:\Folder\File.docx', SINGLE_BLOB) alias
);
SELECT DATALENGTH(col) FROM dbo.blob;
结果:
--------
39578
如果上限为8K,那么我猜以下任一项都是正确的:
VARBINARY(8000)
DATALENGTH()
是一种更好的方法我敢说,对于大于1MB的文件使用文件流是基于以下内容的: 在SQL Server中,blob可以是标准的
varbinary(max)
数据,用于存储
表中的数据,或存储的FILESTREAM varbinary(max)
对象
文件系统中的数据。数据的大小和使用决定了
您应该使用数据库存储还是文件系统存储。如果
下面的条件是正确的,您应该考虑使用<代码> FielestRAM< <代码>:
- 正在存储的对象平均大于1 MB
- 快速读取访问非常重要李>
- 您正在开发使用中间层作为应用程序逻辑的应用程序
varbinary(max)
blob
通常提供更好的流式传输性能
“SET TEXTSIZE”指定varchar(max)
,nvarchar(max)
,varbinary(max)
,text
,ntext
,以及SELECT
语句返回的图像数据的大小
select @@TEXTSIZE
SQL Server的SQL Server本机客户端ODBC驱动程序和SQL Server本机客户端OLE DB提供程序在连接时自动将TEXTSIZE
设置为2147483647。SET TEXTSIZE
的最大设置为2 GB,以字节为单位。设置为0会将大小重置为默认值(4 KB)
如前所述,对于大文件,您应该更喜欢文件流。您是如何尝试的?能否显示用于执行此操作的代码以及该表的创建表结构?此外,没有
nvarbinary
。对不起,我指的是varbinary(max),我还添加了我使用的代码,非常感谢您检查了兼容模式设置吗?@PabloRomeo即使您处于80兼容状态(SQL Server 2000),您也可以创建并正确填充varbinary(max)。兼容性级别设置会影响某些语法和解析,但不会影响数据类型或实际的DML操作。正如文档中明确指出的那样:要么指定varbinary(n)
,要么指定一个最高8000的特定数字-不可能更多;或者,将列或变量定义为varbinary(max)
,在这种情况下,它最多可以容纳2GB的数据。