Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SQL Anywhere 12.0.0 (中文) » SQL Anywhere 服务器 - 数据库管理 » 启动并连接到数据库 » 使用数据库文件 » 创建 SQL Anywhere 数据库 » 选择列数据类型

 

存储 BLOB

BLOB 是未经解释的字节串或字符串,作为值存储在列中。常见的 BLOB 示例有图片文件或声音文件。由于 BLOB 通常都很大,所以可将它们以任何字符串或二进制字符串数据类型(如 CHAR、VARCHAR、NCHAR、BINARY、VARBINARY 等等)的形式进行存储。根据需要存储的 BLOB 的内容和长度来选择数据类型和长度。

注意

通常将字符大对象称作 CLOB,将二进制大对象称作 BLOB,将二者的组合称作 LOB。在本文档中仅使用首字母缩写词 BLOB。

在创建一列以存储 BLOB 值时,您可以控制存储的各个方面。例如,可以指定将不超过指定大小的 BLOB 存储在行中(内置),而将超过指定大小的 BLOB 存储在表扩展页中行以外的位置。此外,您还可以指定,对于存储在行以外位置的 BLOB,该 BLOB 的前 n 个字节(也称作前缀)也会存储在行中。这些存储方面由在 CREATE TABLE 和 ALTER TABLE 语句中指定的 INLINE 和 PREFIX 设置来控制。您为这些设置指定的值会对性能或磁盘存储需求产生意想不到的影响。

如果 INLINE 和 PREFIX 都未指定,或者指定了 INLINE USE DEFAULT 或 PREFIX USE DEFAULT,则如下所述应用缺省值:

  • 对于字符数据类型列(如 CHAR、NCHAR、LONG VARCHAR 和 XML),INLINE 的缺省值为 256,PREFIX 的缺省值为 8。

  • 对于二进制数据类型列(例如 BINARY、LONG BINARY、VARBINARY、BIT、VARBIT、LONG VARBIT、BIT VARYING 和 UUID),INLINE 的缺省值为 256,PREFIX 的缺省值为 0。

建议您不要设置 INLINE 和 PREFIX 值,除非缺省值无法满足某些特定要求。选择缺省值是为了在性能和磁盘空间要求间取得均衡。例如,如果将 INLINE 设置为较大值,并且所有 BLOB 都被内置存储,则行处理性能可能会下降。如果将 PREFIX 值设置得过大,则会增加存储 BLOB 所需的磁盘空间量,因为前缀数据会复制 BLOB 的一部分内容。

如果您确实决定设置 INLINE 或 PREFIX 值,则 INLINE 的长度不得超过列的长度。同样,PREFIX 的长度不得超过 INLINE 的长度。

压缩列的前缀数据未经压缩存储,因此如果满足请求所需的所有数据都存储在前缀中,则不必进行解压缩。

有关 INLINE 和 PREFIX 子句的缺省值的信息,请参见CREATE TABLE 语句

 BLOB 共享