Informix 列數據類型有哪些?
我正在編寫一個查詢,我需要知道一列是否屬於“BLOB”類型的列。根據此文件 ,通常 41 是“BLOB”類型的列的數量。但是,當我查詢
syscolumns
表時,我看到儲存 BLOB 數據的列在我的情況下實際上具有 297 的值。上面連結的那個頁面甚至在其頁面上的任何地方都沒有數字“297”。我找到了另一個頁面,標題為“數據類型常量”,但在這裡,數字“297”甚至沒有出現在頁面上的任何地方。文件的數據類型列表似乎不完整。Informix 中是否有(更多)完整的列類型列表?
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 */
. 該類型是(如另一個答案中所述)“命名行類型”。考慮一個表:
CREATE TABLE bool_check ( b1 BOOLEAN NOT NULL, b2 BOOLEAN );
sqltype
列中的值為syscolumns
:
b1
= 297 = 256 + 41b2
= 41這些對應於
SQLUDTFIXED
(類型 41)。類型SQLBOOL
被標記為’由 FE 使用*$$ front end $$, … 不是 BE 中真正的主要類型$$ back end, meaning database server $$*’。兩者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 */
還有編號為 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