技术开发 频道

解析SQL Server的数据类型 BLOB

【IT168 技术文档】 本文解释了SQL Server用于访问和存储数据的BLOB数据类型,解析了SQL Server BLOB数据存储,访问的方法以及如果降低你的SQL Server BLOB存储的每个字节的总成本。

 BLOB数据是一个每条记录都拥有大量数据的字段。这个数据可以是文本格式的或二进制格式的。当在SQL Server中使用BLOB数据时,每条记录的数据量一般都远远超过了一个单独记录的8K的限制。

 有多种数据类型用于存储BLOB数据,并且它们随着时间已有所改变。可用于BLOB存储的数据类型很多年都没有变,但是在SQL Server 2005中,微软推出了许多新的数据类型。在SQL Server 2008中,微软甚至计划推出更多的数据类型,不过到目前为止,他们还没有在CTP版本中推出这些数据类型。

 在SQL Server 2000和更早的版本中,我们被限制于TEXT、NTEXT和IMAGE数据类型。TEXT数据类型是用于存储非Unicode的BLOB数据,而NTEXT数据类型是用于存储Unicode 的BLOB数据。IMAGE数据类型是用于存储二进制BLOB数据的。你可以使用IMAGE数据类型来存储任何二进制数据,例如图片、office文档、压缩数据等等。因为数据是二进制格式的,所以它可以是Unicode的也可以是非Unicode的。

 SQL Server 2005数据类型是基于VARCHAR、NVARCHAR、VARBINARY和XML的。在使用这些数据类型时,一般你会指定要存储的数据的最大规模。为了在这些字段里存储BLOB数据,你要指定字段的最大规模。这些数据类型允许你在每条记录里最大存储2GB的数据(对于字符和二进制数据是2^31位,对于Unicode数据是2^30)。微软计划在未来的微软SQL Server版本中删除TEXT、NTEXT和IMAGE数据类型,它们的使用将会被转换到新的VARCHAR(MAX)、NVARCHAR(MAX)、VARBINARY(MAX)和XML数据类型上。
  CREATE TABLE BlobData 
  (ID int PRIMARY KEY, 
  FirstName nvarchar(30), 
  LastName nvarchar(30), 
  EmailAddress varchar(255), 
  [Resume] nvarchar(MAX)) 
    在SQL Server 2008中,传说我们会得到一个叫做FILESTREAM的新的数据类型,它可以将二进制数据例如office文档存储到和普通的数据库文件不同的地方。通过将这个数据存储到和普通的MDF和NDF数据文件不同的地方,我们可以将它存储到单独的硬盘上来将访问BLOB数据对数据库中其余内容造成的性能影响降到最低。

 SQL Server BLOB数据怎么存储和访问?

 在使用TEXT、NTEXT和IMAGE数据类型时,数据是不和普通数据存储在一起的。一个被称作指针的很小的二进制值,和普通数据存储在一起。这个二进制值指向数据文件里的数据实际存储的位置。

 当存储VARCHAR(MAX)、NVARCHAR(MAX)、VARBINARY(MAX)和XML数据类型的数据时,如果数据小于一行数据8K的最大限制,那么这个数据被存储到这个页面内。但是如果这个数据比一行数据8K的最大限制大的话,它会以和存储遗留数据类型一样的存储方式来存储,并且它会通过一个二进制指针的值被访问。

 注意:这个二进制值和位置都是在后台处理的,对于用户是不可见的。

 为了以TEXT、NTEXT和IMAGE数据类型读取数据,需要使用READTEXT命令。这个命令接受一个列名还有一个16位的二进制指针,要读取的第一个字符和要读取的字符数目。它使用TEXTPTR函数来获得正确的二进制指针,这个二进制指针是用于定位物理文件中的数据的:
DECLARE @ptr varbinary(16); 
  SELECT @ptr = TEXTPTR(LongText) 
  FROM TextDataExample 
  where TextID = 1 
  READTEXT TextDataExample.LongText @ptr 1 50; 

0
相关文章