二进制字段
二进制数据可以在 SmartEDB 的字符串、二进制大对象(blob)、二进制(binary)和可变二进制(varbinary)字段中存储。如果您需要处理较大的数据字段(超过 1 千字节),建议使用 blob 类型的字段。对于不打算用于索引且数据大小小于 64 千字节的情况,可以使用字符串字段。SmartEDB 中的字符串字段不仅可以包含 ASCII 字符,还可以存储任意二进制数据,无需进行编码。唯一的限制是,字符串字段不能用于内部比较(例如创建索引)或作为 xSQL 的参数传递。如果需要对二进制数据字段进行索引,则可以使用 binary 或 varbinary 数据类型。与 blob 字段不同,binary 和 varbinary 字段可以添加到简单索引和复合索引中。
(有关更多详细信息,请参阅“使用二进制数据”页面。)
BLOB 支持
SmartEDB 通过 C/C++ 接口函数为二进制大对象(BLOB)字段提供支持,并且对于 C# 和 Java 应用程序,可以通过 BLOB 字段注释或属性来处理 BLOB 数据。请注意,BLOB 字段不能是数组或结构体的一部分。当您需要保存流数据且没有已知大小限制时,BLOB 字段非常有用。
在 C/C++ 应用程序中,您可以使用生成的 classname_fieldname_get() 函数将 BLOB 数据复制到应用程序的缓冲区。该函数允许您指定 BLOB 内的起始偏移量,方便灵活地读取数据。
MCO_RET classname_fieldname_get(
/*IN*/ classname *handle,
/*IN*/ uint4 startOffset,
/*OUT*/ char *buf,
/*IN*/ uint4 bufsz,
/*OUT*/ uint4 *len
);
bufsz 参数是应用程序通过 buf 参数传递的缓冲区大小。len 输出参数是实际复制到缓冲区中的字节数(其值将小于等于 bufsz)。 classname_fieldname_size() 函数返回一个二进制大对象字段的大小。
在调用 classname_fieldname_get() 函数之前,可以使用此值来分配足够的内存以容纳该二进制大对象。
MCO_RET classname_fieldname_size( /*IN*/ classname *handle,
/*OUT*/ uint4 * result);
classname_fieldname_put()
函数会填充一个二进制大对象(blob)字段,可能会覆盖先前的内容。它会分配空间并从应用程序的缓冲区复制数据;必须指定二进制大对象的大小。
MCO_RET classname_fieldname_put(
/*IN*/ classname *handle,
/*IN*/ const void *from,
/*IN*/ uint4 nbytes
);
classname_fieldname_append()
函数用于向现有的二进制大对象(blob)追加数据。提供此方法是为了让应用程序不必分配一个足够大的缓冲区来容纳整个二进制大对象,而是可以通过分段写入来节省内存。
MCO_RET classname_fieldname_append(/*IN*/ classname *handle,
/*IN*/ const void * from,
/*IN*/ uint4 nbytes );
要删除(截断)一个二进制大对象(blob),请向 classname_fieldname_put() 函数传递一个大小为 0 的值。