bestlong 怕失憶論壇

 

 

搜索
bestlong 怕失憶論壇 論壇 Database - 資料庫 Interbase & Firebird Firebird 不支援 Boolean 資料型態的替代方案 ...
查看: 2833|回復: 2
go

Firebird 不支援 Boolean 資料型態的替代方案

Rank: 9Rank: 9Rank: 9

發表於 2010-4-10 00:44 |顯示全部帖子
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
我是雪龍
http://blog.bestlong.idv.tw
http://www.bestlong.idv.tw

Rank: 9Rank: 9Rank: 9

發表於 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
我是雪龍
http://blog.bestlong.idv.tw
http://www.bestlong.idv.tw

Rank: 9Rank: 9Rank: 9

發表於 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
我是雪龍
http://blog.bestlong.idv.tw
http://www.bestlong.idv.tw

Archiver|怕失憶論壇

GMT+8, 2024-4-19 09:08 , Processed in 0.018730 second(s), 11 queries .

Powered by Discuz! X1.5

© 2001-2010 Comsenz Inc.