另一个答案中显示的值 4118(十进制)对应于 hex 0x1016;(16又名 22 十进制)对应于SQLROW,0x1000(4096 十进制)位对应于#define SQLNAMED 0x1000 /* Named row type vs row type */. 该类型是(如另一个答案中所述)“命名行类型”。
这些对应于SQLUDTFIXED(类型 41)。该类型SQLBOOL被标记为“由 FE [前端]使用,......不是 BE [后端,表示数据库服务器]中真正的主要类型”。两者collength都是1。
标题的相关部分包括:
SQL 类型:
#define SQLCHAR 0
#define SQLSMINT 1
#define SQLINT 2
#define SQLFLOAT 3
#define SQLSMFLOAT 4
#define SQLDECIMAL 5
#define SQLSERIAL 6
#define SQLDATE 7
#define SQLMONEY 8
#define SQLNULL 9
#define SQLDTIME 10
#define SQLBYTES 11
#define SQLTEXT 12
#define SQLVCHAR 13
#define SQLINTERVAL 14
#define SQLNCHAR 15
#define SQLNVCHAR 16
#define SQLINT8 17
#define SQLSERIAL8 18
#define SQLSET 19
#define SQLMULTISET 20
#define SQLLIST 21
#define SQLROW 22
#define SQLCOLLECTION 23
#define SQLROWREF 24
/*
* Note: SQLXXX values from 25 through 39 are reserved to avoid collision
* with reserved PTXXX values in that same range. See p_types_t.h
*
* REFSER8: create tab with ref: referenced serial 8 rsam counter
* this is essentially a SERIAL8, but is an additional rsam counter
* this type only lives in the system catalogs and when read from
* disk is converted to SQLSERIAL8 with CD_REFSER8 set in ddcol_t
* ddc_flags we must distinguish from SERIAL8 to allow both
* counters in one tab
*
* SQLSTREAM: Is a synonym for SQLUDTFIXED used by CDR (Enterprise
* Replication) code
*/
#define SQLUDTVAR 40
#define SQLUDTFIXED 41
#define SQLSTREAM SQLUDTFIXED
#define SQLREFSER8 42
/* These types are used by FE, they are not real major types in BE */
#define SQLLVARCHAR 43
#define SQLSENDRECV 44
#define SQLBOOL 45
#define SQLIMPEXP 46
#define SQLIMPEXPBIN 47
/* This type is used by the UDR code to track default parameters,
it is not a real major type in BE */
#define SQLUDRDEFAULT 48
#define SQLUNKNOWN 51
#define SQLBIGINT 52
#define SQLBIGSERIAL 53
#define SQLMAXTYPES 54
#define SQLLABEL SQLINT
标志:
#define SQLNONULL 0x0100 /* disallow nulls */
/* a bit to show that the value is from a host variable */
#define SQLHOST 0x0200 /* Value is from host var. */
#define SQLNETFLT 0x0400 /* float-to-decimal for networked backend */
#define SQLDISTINCT 0x0800 /* distinct bit */
#define SQLNAMED 0x1000 /* Named row type vs row type */
#define SQLDLVARCHAR 0x2000 /* Distinct of lvarchar */
#define SQLDBOOLEAN 0x4000 /* Distinct of boolean */
#define SQLCLIENTCOLL 0x8000 /* Collection is processed on client */
/* we are overloading SQLDBOOLEAN for use with row types */
#define SQLVARROWTYPE 0x4000 /* varlen row type */
类型BLOB NOT NULL和CLOB NOT NULL都被编码coltype为 297(41 + 256 - 相同的 a BOOLEAN NOT NULL),或72 (与SQLUDTFIXEDfor相对)。固定长度数据是一个描述符,它提供有关or值实际存储位置的所有详细信息。collength1BOOLEAN NOT NULLBLOBCLOB
coltype
系统目录表列中的值syscolumns
主要在 Informix ESQL/C 标题中定义sqltypes.h
。此标头在整个 Informix 服务器代码中使用。列中的值
coltype
是低位中的 8 位(无符号)整数和高位中的各种标志值的混合。特别是,当使用NOT NULL
限定符定义列时,0x100
会设置该位 — 对应于“添加 256”。还有其他你不太可能看到的标志位。另一个答案中显示的值 4118(十进制)对应于 hex
0x1016
;(16
又名 22 十进制)对应于SQLROW
,0x1000
(4096 十进制)位对应于#define SQLNAMED 0x1000 /* Named row type vs row type */
. 该类型是(如另一个答案中所述)“命名行类型”。考虑一个表:
sqltype
列中的值为syscolumns
:b1
= 297 = 256 + 41b2
= 41这些对应于
SQLUDTFIXED
(类型 41)。该类型SQLBOOL
被标记为“由 FE [前端]使用,......不是 BE [后端,表示数据库服务器]中真正的主要类型”。两者collength
都是1
。标题的相关部分包括:
SQL 类型:
标志:
还有编号为 100 到 125 的“C-ISAM 类型”,名称为
CCHARTYPE
和CDECIMALTYPE
。他们在这里不是直接关注的。头文件中有 524 行(至少在我查看的版本中)。其中,74 行是空白的,315 行包含代码,其余行是纯注释行。AFAIK,这种SQLREFSER8
类型是死产的;它在此文件之外不存在。类型
BLOB NOT NULL
和CLOB NOT NULL
都被编码coltype
为 297(41 + 256 - 相同的 aBOOLEAN NOT NULL
),或72 (与SQLUDTFIXED
for相对)。固定长度数据是一个描述符,它提供有关or值实际存储位置的所有详细信息。collength
1
BOOLEAN NOT NULL
BLOB
CLOB
下面是 Informix 数据类型的列表:
此信息可在此非官方网页上找到。
来自 Jonathan Leffler 以下评论的其他相关信息:
阅读下面的完整评论,其中还包含一些更有用的信息。