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

SQL Anywhere 12.0.1 » SQL Anywhere 服务器 - 编程 » ODBC 支持

 

数据对齐要求

使用 SQLBindCol、SQLBindParameter 或 SQLGetData 时,将为列或参数指定 C 数据类型。在某些平台上,提供给每列的存储(内存)必须正确对齐,才能读取或存储指定类型的值。ODBC 驱动程序检查数据是否正确对齐。当对象没有正确对齐时,ODBC 驱动程序会发布 [无效的字符串或缓冲区长度] 消息 ([SQLSTATE] HY090 或 S1090)。

下表列出了诸如 Sun Sparc、Itanium-IA64 和基于 ARM 的设备之类的处理器的内存对齐要求。数据值内存地址必须是指示值的倍数。

C 数据类型 需要的对齐方式
SQL_C_CHAR
SQL_C_BINARY
SQL_C_GUID
SQL_C_BIT
SQL_C_STINYINT
SQL_C_UTINYINT
SQL_C_TINYINT
SQL_C_NUMERIC
SQL_C_DEFAULT
SQL_C_SSHORT 2
SQL_C_USHORT 2
SQL_C_SHORT 2
SQL_C_DATE 2
SQL_C_TIME 2
SQL_C_TIMESTAMP 2
SQL_C_TYPE_DATE 2
SQL_C_TYPE_TIME 2
SQL_C_TYPE_TIMESTAMP 2
SQL_C_WCHAR 2(在所有平台上,缓冲区大小必须是 2 的倍数)
SQL_C_SLONG 4
SQL_C_ULONG 4
SQL_C_LONG 4
SQL_C_FLOAT 4
SQL_C_DOUBLE 8(对于 ARM,采用 4)
SQL_C_SBIGINT 8
SQL_C_UBIGINT 8

x86、x64 和 PowerPC 平台不需要内存对齐。x64 平台包括 Advanced Micro Devices (AMD) AMD64 处理器和 Intel Extended Memory 64 Technology (EM64T) 处理器。