Firebird的基本数据类型

来源:百度文库 编辑:神马文学网 时间:2024/05/01 17:04:03
 [分享]Firebird的基本数据类型
[分享]Firebird的基本数据类型
由于排版关系,取幂将用[],比如10[5],表示10的5次方。
INTEGER:长整型,取值范围:-2147483648至2147483647
FLOAT:单精度浮点型,取值范围:1.175*10[-38]至3.402*10[38]
DOUBLE PRECISION:双精度浮点型,取值范围:2.225*10[-308]至1.797*10[308]
DECIMAL:小数型,可指定有效位数最大为18位或小数点后18位。比如DECIMAL(5,2),就是指有5位数字,不含小数点,形如123.45
NUMERIC:小数型,与DECIMAL类似,稍后讲它们的区别。
注意,当数据含小数部分时,请尽量用DECIMAL,因为浮点型有精度问题,除非数值特别大,才用浮点型!
DECIMAL与NUMERIC的区别:
比如,DECIMAL(5,2)与NUMERIC(5,2)所分别定义的字段,DECIMAL(5,2)指的是至少有5位数字,还可以更多!而NUMERIC(5,2)指的是,就是5位,不多也不少。
SMALLINT:短整型,取值范围:-32768至32767,数值确定比较小时,可以使用,可以节省磁盘空间与提升效率
CHAR:字符型,最多32767个字符,注意,使用CHAR类型,即使字符数没有达到指定字段的宽度,也会用空字符补满!取值时,请注意用TRIM()等函数去掉多余空字符。除非确定每条记录的字符数不变,否则请用VARCHAR类型。
VARCHAR:可变长度字符型,最多32767个字符,存储时,会根据内容长度自动改变存储位数,不会产生多余空字符。当字符数超过32767时,请用BLOB型。
TIME:时间型,取值范围:00:00至23:59.9999
TIMESTAMP:日期时间型,取值范围:公元100年1月1日至公元32768年2月29日,同时包含日期与时间信息。
DATE:日期型,取值范围:公元100年1月1日至公元32768年2月29日。,注意,建库时需选择DIALECT 3级别才支持DATE型,否则就是TIMESTAMP型。
BLOB:大二进制型,可支持Text(文本)、Binary Data(二进制型,比如图片,声音等)等子类型。取值范围:64KB以内。
下边这条错了!!!!
BOOLEAN:逻辑型,Firebird 2.0引入的新类型。取值范围:TRUE(值)或FALSE(假)。使用BOOLEAN而不用SMALLINT的理由是可以用更少的位数来存储,而且与SQL标准兼容,但是,数据将与1.5版本不兼容。

偶尔看见Interbase6文档里的Data Definition Guide的Character Sets and
CollationOrders那一章Character set storage requirements那一节下的一段话:
InterBase restricts the maximum amount of storage in each field of a CHAR column to
32,767 bytes. VARCHAR columns are restricted to 32,765 bytes.
Interbase 6 的VARCHAR所能容纳的最多字符要比CHAR少两个(这两个字节难道是用来存放字符串长度的?)

虽然 ib7支持boolean类型,但由于为了兼容ib6,我还是使用char来存放“是”“否”来判断,使用二个小函数,可以方便使用:
function TForm1.IfThen(Avalue: Boolean; const ATrue,
AFalse: string): string; //根据boolean返回字符串
begin
if Avalue then
Result := ATrue
else
Result := AFalse;
end;
function TForm1.IfThen_boolean(Avalue: string): boolean;//根据字符返回boolean
begin
if trimright(Avalue)= ‘是‘ then
result:= true
else
result:= false;
end;
 回复:[分享]Firebird的基本数据类型
请问blob的text子类型能支持select 的 like %xxxx%方式查询吗

楼主关于 DECIMAL与NUMERIC的区别 解释的好象有些问题。找了点资料:
According to the SQL-92 standard, both NUMERIC and DECIMAL constrain the
stored number to be within the declared scale. The difference between the two types is
in the way the precision is constrained. Precision is exactly “as declared” for a column
of type NUMERIC, whereas a DECIMAL column can accept a number whose precision
is at least equal to that which was declared, up to the implementation limit.
NUMERIC and DECIMAL types, as implemented in Firebird, are identical except
when precision is less than 5. Both types effectively conform to the standard DECIMAL
type. NUMERIC is thus not compliant with SQL-92.
按照上面说的,楼主的解释所述依据的应该是 sql-92 的规定,而 Firebird 中的 两种 Scaled Number 类型 都和 sql-92 标准中的 DECIMAL 一致,Firebird 中的 numeric 和 sql-92标准中的 NUMERIC 没有关系。
firebird 中的这两种 Scaled Number 类型 区别可由下面的表看出,它们只在精度>=5时完全相同,<=4时存放方式不同。它们都可扩充(而不是受制于声明的(a,b)),所能扩充的最大范围由 Firebird 内部存放的类型所决定。
Table 9-2. Range and Storage Type of Firebird NUMERIC and DECIMAL Types
PRECISION     TYPE            DIALECT 3     DIALECT 1
1 to 4         NUMERIC         SMALLINT     SMALLINT
--            DECIMAL          INTEGER      INTEGER
5 to 9    NUMERIC and DECIMAL    INTEGER      INTEGER
10 to 18  NUMERIC and DECIMAL     BIGINT      DOUBLE PRECISION
以上仅仅是一部分资料,其余的还没看到过,欢迎大家改错补漏,这样概念就会越来越清晰。

[quote]
BOOLEAN:逻辑型,Firebird 2.0
[/quote]
有吗,真有就好了.
另外我看The Firebird Book中有数组字段,真的有,我试过了
如:
create table abc (id bigint,arr_int integer[0:3])
欢迎访问我的主页:
http://www.flylink.net.cn