SQL数据类型

ODBC标准规定了SQL数据类型的基本特性,只要遵循这些规定即可以编写跨数据库的用户程序。另一方面,SQL数据类型和数据库实际使用的数据类型之间的映射关系是由ODBC驱动自行实现的,因为每种数据库使用的数据类型定义不尽相同,各种ODBC驱动的SQL数据类型也不尽相同。(通过ODBC API函数SQLGetTypeInfo,用户可以查看SQL数据类型和DBMS数据类型之间的映射关系,参见Catalog函数。)

一般而言ODBC没有明确定义数值类型、时间类型的精度限制和字符类型的长度限制(如SQL_CHAR,ODBC规定该类型的实现是char(n),但不同驱动允许的n值上限并不一样),因此程序员需要阅读ODBC驱动的相关文档确定这些特性。

下表列出了神通数据库 ODBC Driver支持的SQL数据类型的详细特性以及与神通数据库 DBMS类型之间的映射关系。

SQL数据类型 神通数据库数据类型 数据类型特性
SQL_CHAR CHAR(n) 长度为n字符的定长字符串,n的上限是8000
SQL_VARCHAR VARCHAR(n) 最大长度为n字符的变长字符串,n的上限是8000
SQL_LONGVARCHAR CLOB 变长的字符类型大对象,存储上限是字节
SQL_BINARY BINARY(n) 长度为n字符的定长二进制数据,n的上限是8000
SQL_VARBINARY VARBINARY(n) 最大长度为n字符的变长二进制数据,n的上限是8000
SQL_LONGVARBINARY BLOB 变长的二进制类型大对象,存储上限是字节
SQL_BIT BIT 存储大小为1个bit的二进制数据
SQL_TINYINT TINYINT 存储大小为1个字符的有符号整数,3位十进制精度
SQL_SMALLINT SMALLINT 存储大小为2个字符的有符号整数,5位十进制精度
SQL_INTEGER INT 存储大小为4个字符的有符号整数,10位十进制精度
SQL_BIGINT BIGINT 存储大小为8个字符的有符号整数,19位十进制精度
SQL_DECIMAL DECIMAL(p, s)

有符号的精确数值类型,10进制精度 < p,小数位数 < s

(1 <= p <= 38; s <= p )

SQL_NUMERIC NUMERIC(p, s)

有符号的精确数值类型,10进制精度 < p,小数位数 < s

(1 <= p <= 38; s <= p )

SQL_REAL REAL 存储大小为4字符的浮点精度数值类型,6位十进制精度(24位二进制精度)
SQL_FLOAT FLOAT(p)

Float类型则取决于float(p)中定义的p。

如果p小于等于24,则float与real类型是等价的, 6位十进制数字精度,存储大小为4字符;如果p大于24,则float与double precesion类型是等价的,15位十进制数字精度,存储大小为8字符。

(1 <= p <= 53)

SQL_DOUBLE DOUBLE PRECISION 存储大小为8字符的浮点精度数值类型,15位十进制精度(53位二进制精度)
SQL_TYPE_DATE DATE 存储大小为4字符的日期类型
SQL_TYPE_TIME time(p) 存储大小为8字符的时间类型。p表示秒域中小数部分的位数。(0 <= p <= 6)
SQL_TYPE_TIMESTAMP timestamp(p) 存储大小为8字符的时间戳类型。p表示秒域中小数部分的位数。(0 <= p <= 6)