bestlong 怕失憶論壇

標題: Firebird 不支援 Boolean 資料型態的替代方案 [打印本頁]

作者: bestlong    時間: 2010-4-10 00:44     標題: Firebird 不支援 Boolean 資料型態的替代方案

1. 使用 smallint 0->False, 1->True
2. 使用 char(1), 'Y' or 'T' -> True, 'N' or 'F' -> False
3. 使用 varchar(1), 'Y' or 'T' -> True, 'N' or 'F' -> False
作者: bestlong    時間: 2010-4-10 00:46

在 KTop 的討論
http://delphi.ktop.com.tw/board. ... =1497&tid=91344

節錄其中 P.D. 版主的經驗分享

做為 boolean 的欄位最好使用 char 格式, 因為 varchar 有 null 值的認定, 也就是該欄位不填入 F 就是NULL, 如果你想判斷非T的欄位, 這樣寫的 SQL 一定有問題 MYFIELD <> 'T', 因為這樣無法抓出 NULL 值, 正確的寫法是 MYFILED <> 'T' or MYFILED IS NOT NULL 但如果使用 CHAR(1) 的話, 就可以寫 MYFIELD <> 'T' 就一定錯不了, 因為 FB 為自動為 CHAR 填入 CHR(32), 絶對不會是 NULL
作者: bestlong    時間: 2010-4-10 21:22

No BOOLEAN field in Firebird?

There is no built-in boolean field, but you have several options:

1. use char(1)
2. use smallint
3. use domains

Domains are probably the best solution. You can create domain like this:


CREATE DOMAIN BOOLEAN
AS SMALLINT
CHECK (value is null or value in (0, 1));


Later in table definition you can refer to it as a regular datatype.


CREATE TABLE t1
(
C1 VARCHAR(10),
B1 BOOLEAN,
B2 BOOLEAN NOT NULL,
...
);


If you use a connectivity library like OleDB under .Net, you can override the OleDB provider's GetSchema method, so the DataTables you get from queries have native .Net booleans.


參考來源 http://grandruru.blogspot.com/20 ... ld-in-firebird.html




歡迎光臨 bestlong 怕失憶論壇 (http://www.bestlong.idv.tw/) Powered by Discuz! X1.5