1、firebird的数据类型
firebird支持如下的几类数据类型:
数字类型(整数:包括Integer,Smallint;
浮点数:包括Float,Double Precision;
定点数:包括Numeric,Decimal)
日期时间类型(包括Date,Time,Timestamp)
字符类型(包括Char,Varchar)
布尔类型(Boolean)
二进制类型(Blob)。
此外,firebird还支持上述除了blob外的所有数据类型的数组形式,维数可以从1维到16维。数组既可以作为一个整体处理,也可以按照其中包含的元素一个一个的处理。不过使用数组需要一些额外的工作,因为一般的sql语句无法处理数组。
////////////////////////
名称 大小 范围/精度 描述
Blob 变长 blob段大小限于64K 动态变长度二进制类型,可用于存放大量数据的情况,如图片、音乐、视频、多媒体等。其基本结构单位为段,它的子类型描述了存储数据的详细信息
Boolean 16位 True False Unkown 代表了逻辑上的真、假或不确定。必须是ODS11或以上版本,与Dialect无关。
Char(N) n个字符 1到32767个字节。字符集决定了其能容纳的最大字符数 固定长度的字符或字符串
Date 64位 从公元后100年一月一日到32768年二月29日 日期类型。只有年月日,不带时间
Decimal(P,S) 变长(16、32或64位) 精度p从1到18:指定数字的总长度;标度s从0到18:指定小数点后的位数。s<=p 定点小数。例如decimal(5,3)可以存储的数字形式为:pp.sss
Double Precision 64位 从2.225×10的-308次方到1.797×10的308次方 IEEE双精度浮点数,15位长度
Float 32位 从1.175×10的-38次方到3.402×10的38次方 IEEE单精度浮点数,7位长度
Integer 32位 从-2147483648到2147483647 整数
Numeric(P,S) 变长(16、32或64位) 精度p从1到18:指定数字的总长度;标度s从0到18:指定小数点后的位数。s<=p 定点小数。例如decimal(10,3)可以存储的数字形式为:ppppppp.sss
Smallint 16位 从-32768到32767 短整数
Time 64位 从0:00 AM到23:59.9999 PM 时间类型
Timestamp 64位 从公元后100年一月一日到32768年二月29日 带有时间的日期类型
Varchar(N) n个字符 1到32767个字节。字符集决定了其能容纳的最大字符数 变长字符或字符串类型
2、数据类型详解
2、1、定点数字类型 InterBase7.0支持两种定点数字类型:numeric和decimal。这两种类型的格式是:numeric[(p[,s])] 、decimal[(p[,s])]。其中:p为精度,也就是数字的总长度,范围从1到18;s为标度,指小数点后的位数,范围从0到p。注意:精度和标度是可选的,你可以两者均不指定,也可以只指定精度,或者全部指定。
2、2、BLOB类型
对于不能用标准SQL数据类型存储的数据,firebird提供了动态变长度二进制数据类型BLOB,专门用来存储大量变长度数据,如图像、声音、视频、多媒体、文档等。由于BLOB能存储多种信息而且数据量比较大,因而其读写操作需要特别的处理。BLOB类型可以充分享受数据库管理系统的好处,包括事务控制、数据维护、使用select、update、delete等语句。使用BLOB类型,可以避免存储指向非数据库文件的指针,因为和其他数据库系统不同,InterBase将BLOB数据存储在数据库中,而一般数据库系统将这类数据放在数据库之外的文件中。在InterBase7.0的表中,BLOB列只存储BLOB ID,不存储BLOB实际数据,BLOB实际数据存储在数据库的其他地方(通过后面的知识我们知道是存储在BLOB页面上)
(1)、BLOB段及长度
从上述我们可以知道,BLOB类型其读写、存储的基本结构单位是段。通常情况下要为段指定一个大小。实际上,对select、update、insert语句来说,段大小是可以变长的,例如一个插入操作,它读入3个段,第一个段大小为30,第二个段大小为300,第三个段大小为3。指定段的大小用segment size语法
例如下面的表创建了两个BLOB列:
Create Table Table2 (Blob1 Blob, Blob2 Blob Segment Size 512);
第一个BLOB列为BLOB1,大小为缺省值80;第二个段大小为512。
(2)、BLOB子类型 在定义BLOB数据时,你可以进一步指明其子类型。子类型是用一个正数或负数表示的。正数是系统保留使用的,所有的用户自定义子类型必须用负数表示。
下面的表格说明了firebird保留的子类型:
子类型 |
描述 | |
1 |
文本数据 | |
2 |
二进制语言表示(BLR) | |
3 |
访问控制列表 | |
4 |
预留 | |
5 |
数据表当前元数据的编码描述 | |
6 |
对不规则结束的多数据库事务的描述 |
用sub_type子句指定子类型。最常用的子类型是0、1。 例如:
Create Table Table2 (Blob1 Blob, Blob2 Blob Sub_Type 1, Blob3 Blob Sub_Type -1);
上面的语句创建了一个含有三个BLOB类型的数据表。第一个是缺省子类型0,代表无类型二进制数据;第二个子类型为1,代表是文本数据;第三个子类行为-1,代表用户自定义类型。
2、3、Boolean数据类型
Boolean有三种可能的取值:True、False、Unknown,分别相当于逻辑上的真、假、不确定。
2、4、定义数组类型
使用数组的好处是可以将多个相关的数据项放到一个列中存储。你既可以把数组作为一个整体进行处理,也可以按照其中的数据项一个一个进行处理。可以在下列情形下可以考虑使用数组:
1、数据项呈现为自然的集合特性。
2、列中的多个相关值必须作为一个单元整体看待而不是把它们分散在多个列中。
3、整体中的每个元素必须能被单独标示、访问。
数组中所有元素的数据类型必须一致,不能定义数组的数组。
数组可以使用create table,create domain定义,定义数组列和定义其它列并没有什么特别之处,唯一的是你要为数组指定维数。例如:
Create Table Table1 (Name Char(10), Char_Arr Char(10)[4]);
上面的语句定义了一个char_arr的列,它是一个包含4个元素的一维数组,每个元素是固定长度为10的字符类型。
数组的维数必须放在方括号中,紧跟在数组元素数据类型的后面。
(1)、多维数组 InterBase7.0支持多维数组,维数可达16维。 例如:
Create Table Table1 (Int_Arr2 Integer[4,5], Int_Arr3 Integer[4,5,6], Int_Arr6 Integer[4,5,6,7]);
(2)、指定数组维数的上下界
默认情况下,数组的维数是从1开始的。例如: Create Table Table1 (Int_Arr Integer[4]); 列INT_ARR数组的维数从1到4,下界为1,上界为4。 你也可以改变下界的值,使其从0或其它值开始。格式是:
下界:上界
例如:
Create Table Table1(Int_Arr Integer[0:3, 0:3]);
上面的2维数组的下界都从0开始,上界为3。
3、数据类型转换
cast函数的语法是:
CAST ( value AS datatype)
其中:
value为要转换的值,datatype是目标类型。
cast函数可进行如下类型的转换:
1、将日期时间类型(date、time、timestamp)转换为字符类型。
2、将字符类型转换为日期时间类型。
3、将timestamp类型转换为date或time类型。
4、date 或time类型转换为timestamp类型。
例如:
Where Hire_Date = Cast(Interview_Date As Date);
将字符类型INTERVIEW_DATE转换为日期类型进行比较。