列大小

数值数据类型的列(或参数)大小定义为列或参数的数据类型使用的最大位数,或数据的精度。 对于字符类型,这是数据的长度;对于二进制数据类型,列大小定义为数据的长度(以字节为单位)。 对于时间、时间戳和所有间隔数据类型,这是此数据的字符表示形式的字符数。 下表显示了为每个简洁的 SQL 数据类型定义的列大小。

SQL 类型标识符 列大小
所有字符类型[a],[b] 列或参数字符中定义的或最大列大小(如SQL_DESC_LENGTH描述符字段中包含)。 例如,定义为 CHAR(10)的单字节字符列的列大小为 10。
SQL_DECIMAL SQL_NUMERIC 定义的数字数。 例如,定义为 NUMERIC(10,3) 的列的精度为 10。
SQL_BIT[c] 1
SQL_TINYINT[c] 3
SQL_SMALLINT[c] 5
SQL_INTEGER[c] 10
SQL_BIGINT[c] 19 (如果已签名) 或 20 (如果未签名)
SQL_REAL[c] 7
SQL_FLOAT[c] 15
SQL_DOUBLE[c] 15
所有二进制类型[a],[b] 列或参数的定义或最大长度(以字节为单位)。 例如,定义为 BINARY(10) 的列的长度为 10。
SQL_TYPE_DATE[c] 10(yyyy-mm-dd 格式的字符数)。
SQL_TYPE_TIME[c] 8(hh-mm-ss 格式的字符数)或 9 + s(hh:mm:ss[.fff...] 格式的字符数,其中秒精度为数)。
SQL_TYPE_TIMESTAMP 16(yyyy-mm-dd hh:mm 格式中的字符数)

19(yyyy-mm-dd hh:mm:ss 格式的字符数)



20 + s(yyyy-mm-dd hh:mm:ss[.fff...] 格式的字符数,其中精度为秒数)。
SQL_INTERVAL_SECOND 其中 p 是间隔前导精度,s 是秒精度,p (如果 s=0) 或 p+s+1 (如果 s>0)。[d]
SQL_INTERVAL_DAY_TO_SECOND 其中 p 是间隔前导精度,s 是秒精度、9+p(如果 s=0)或 10+p+s(如果 s>0)。[d]
SQL_INTERVAL_HOUR_TO_SECOND 其中 p 是间隔前导精度,s 是秒精度,6+p(如果 s=0)或 7+p+s(如果 s>0)。[d]
SQL_INTERVAL_MINUTE_TO_SECOND 其中 p 是间隔前导精度,s 是秒精度,3+p(如果 s=0)或 4+p+s(如果 s>0)。[d]
SQL_INTERVAL_YEAR SQL_INTERVAL_MONTH SQL_INTERVAL_DAY SQL_INTERVAL_HOUR SQL_INTERVAL_MINUTE p,其中 p 是间隔前导精度。[d]
SQL_INTERVAL_YEAR_TO_MONTH SQL_INTERVAL_DAY_TO_HOUR 3+p,其中 p 是间隔前导精度。[d]
SQL_INTERVAL_DAY_TO_MINUTE 6+p,其中 p 是间隔前导精度。[d]
SQL_INTERVAL_HOUR_TO_MINUTE 3+p,其中 p 是间隔前导精度。[d]
SQL_GUID 36(aaaaaaaa-bbbb-cccc-dddd-eeeeee 格式的字符数)

[a] 对于在 ODBC 2.0 驱动程序中调用 SQLSetParam 的 ODBC 1.0 应用程序,对于在 ODBC 1.0 驱动程序中调用 SQLBindParameter 的 ODBC 2.0 应用程序,当 *StrLen_or_IndPtr 为SQL_LONGVARCHAR或SQL_LONGVARBINARY类型SQL_DATA_AT_EXEC时, 必须将 ColumnSize 设置为要发送的数据的总长度, 不是此表中定义的精度。

[b] 如果驱动程序无法确定变量类型的列或参数长度,它将返回SQL_NO_TOTAL。

[c] 此数据类型忽略 SQLBindParameterColumnSize 参数。

[d] 有关间隔数据类型中列长度的常规规则,请参阅 本附录前面的间隔数据类型长度

为列(或参数)大小返回的值与任何一个描述符字段中的值不对应。 这些值可能来自SQL_DESC_PRECISION或SQL_DESC_LENGTH字段,具体取决于数据类型,如下表所示。

SQL 类型 对应于的描述符字段

列或参数大小
所有字符和二进制类型 LENGTH
所有数值类型 PRECISION
所有日期/时间和间隔类型 LENGTH
SQL_BIT LENGTH