数据类型
数据类型特性
kBase系统提供丰富的数据类型,以尽可能满足各种应用需求。
kBase系统中基本字段类型分为四种,基本数值型、文本型数据、二进制数据、增强型数据。
¾基本数值型包括CHAR、VCHAR、MVCHAR、AMVCHAR、INTEGER、NUM、DATE、TIME、AUTO等,这类数据特点与作用都同传统关系数据库类似;
¾文本型数据包括STRING、STRCHAR、MTEXT、MTEXTCHAR、TEXT、TEXTCHAR、LTEXT,主要是为了管理非结构化文档而设计的,它是kBase系统与传统关系数据库主要区别之一,实现了高速简捷的全文检索;
¾二进制数据SOB、LOB、DOB是为方便管理二进制数据而设计;
¾增强型数据包括VSM、TNAME、DNAME、MIXTEXT、MIXTEXTCHAR、MIXTEXTAUTO 等,这些字段类型各有特点,为KBase系统引入很多有特的功能。
以下是各种数据类型的简表:
DNAME
- 虚拟字段,返回表的显示名称
MIXTEXT 分词-
虚拟字段,其它子段混合而成MIXTEXTCHAR 分字-
虚拟字段,其它子段混合而成MIXTEXTAUTO 自动-
虚拟字段,其它子段混合而成
DOB
2G 是数字对象字段
CHAR
这种数据类型,用于存储定长的字符串,其最大长度由设计者限定,但最大长度不能超过254个字符。它通常用于容纳如人名、公司名、地址等内容。在KBase 系统中,如果是需要精确查询的内容,应定义为CHAR类型(或是具有相似特性的VCHAR)。
例如,一般对保存文件名的字段,应将它定义为CHAR型,这样,我们就可以对它进行精确匹配检索。
如上图示,在表(表名为“TEST”)中,其中“文件名”字段是CHAR字段。我们可以对文件名进行多种方式的查询:
1.精确查。查询SQL语句如下:
SELECT * FROM TEST文件名=’ Car0001.jpg’
则返回“序号”为 200 的一条记录。
在KBase系统中,所有检索都是大小不敏感的,因此如下SQL语句:
SELECT * FROM TEST文件名=’ CAR0001.JPG’
同样命中“序号”为 200 的记录。
2.前方一致查。检索词加上?结束。查询SQL语句如下:
SELECT * FROM TEST文件名=’ Car?’
则返回“序号”为 200、231 的二条记录,即查出所有“文件名”中以子串’Car’开始的内容。
语法要求是,以?为检索内容的后缀组合成检索词。
3.包含查。示例查询SQL语句如下:
SELECT * FROM TEST文件名=’ ?001’
则返回“序号”为 200、231、350 的三条记录,即查出所有“文件名”中包
含子串’001’。
语法要求是,以?为检索内容的前缀组合成检索词。
注意:这种CHAR字段的包含查采用的是遍历记录的方式,如果表中记录数很大,性能将受到严重限制,应谨慎使用!需要这种使用方式时,可采用后面说明的STRCHAR字段类型。
4.位置查。查询SQL语句如下:
SELECT * FROM TEST文件名=’ Car*bmp’
则返回“序号”为231 的一条记录。
位置查还有两种更为精确的用法,如:
SELECT * FROM TEST文件名=’ Car0001?jpg’
则返回“序号”为200、600 的二条记录。
SELECT * FROM TEST文件名=’ C???001.jpg’
则返回“序号”为200 的一条记录。而不会命中“序号”为350 的记录。
语法要求是,以位置描述标记分隔两个字串STR1和STR2组合成检索词,并且具有前方一致查的特性,命中记录的相应字段必须以STR1开始,区别是还必须包含STR2。其中:
STR1*STR2 表示STR1与STR2相隔0个以上的字符;
STR1?STR2 表示STR1与STR2相隔1个字符;
STR1?…?STR2 表示STR1与STR2相隔n个字符,n等于表达式中?号的个数;
注意:这里字符的意义同GB18030标准,而不是指字节。一个ASCII是一个字符(占一字节),一个汉字也是一个字符(占两字节)。
5.比较查。对CHAR字段,支持所有类型的比较查,如 > 大于、< 小于、
>= 大于等于、<= 小于等于。例如:
也可以用单引号引起来SELECT * FROM TEST文件名>’ Car’
则返回“序号”为350、588的二条记录。
同前,需要注意的是,字符串的比较是忽略大小写的。
对CHAR字段,系统提供几种索引方式,可是无索引(NON),正常索引(NORMAL),唯一索引(UNIQUE)。如果是无索引,只能支持精确查,对正常索引和唯一索引都支持前面提到的所有检索方式。正常索引和唯一索引在使用上是一致的,其差别仅体显在内在性能上。唯一索引更适合不重复的字段。
VCHAR
同CHAR字段,这种数据类型,也是用于存储的字符串,但其是变长的,不需用户来设定最大长度,可用于存储不超过254个字符的串。其用途、特性与CHAR 完全一致,甚至,在检索方式及性能上也完全一致。两者间的唯一差别是在数据的存放方式上,存放方式的差异带来存取效率的差别。
通常情况下,VCHAR会比CHAR更节省磁盘空间,尤其是在不同记录数据长度差别很大的时候。但对VCHAR的存取相对于CHAR来说更费时。系统对CHAR
有更高的存取速度,更优的缓存效率。
具体使用参见CHAR的说明,这里不再赘述。
MVCHAR
MVCHAR,从名称来看,就知道它是VCHAR的孪生弟兄。其特性与VCHAR 有很多相同的地方,但差别也很多。
MVCHAR即是 Muti-VCHAR,多值变长串,也就是说,一条记录可以有多个值。多个不同的值之间用分隔符分隔。
MVCHAR分隔符可以为:
半角字符(ASCII码): \ @ , ;
全角字符(GB18030字符): ,、:@¥
如上示例的表(表名为CJFD2000)中,“专题代码”即是一个MVCHAR字段,这里用的分隔符是分号(;)。检索及相应结果示例如下:
当检索SQL语句为:
SELECT * FROM CJFD2000 WHERE 专题代码=’C025’
结果如下:
当检索SQL语句为:
SELECT * FROM CJFD2000 WHERE 专题代码=’C024’
结果如下:
由上可以看出,“篇名”为“彩传感器在节水农业中的应用研究”的记录,它的专题代码字段有两个不同的值’C024’和’C025’。
如果想查询“专题代码”即为’C024’又为’C025’的记录,用如下SQL语句:SELECT * FROM CJFD2000 WHERE 专题代码=’C024;C025’
是无法达成目的,因为系统认为你在查一个值为’C024;C025’的专题代码。正确的SQL语句如下:
SELECT * FROM CJFD2000 WHERE 专题代码=’C024’ AND专题代码=’C025’
当前,系统没有限定一个MVCHAR字段最多可对应多少个字段值,只限定了MVCHAR字段总长最大可达到4096字节。这4096字节包含所有字段值及其分隔符的总长。
INTEGER 和 NUM
同传统数据库,KBase系统也提供几种常用的数值型字段,INTEGER即是其一。INTEGER,整型数据。这种数据类型的字段一般存储的是计数、数量、年龄等。整型数据也被频繁用于保存ID号如客户編号、订单号。
INTEGER本质上与CHAR类似,具有单一数值,可以精确查询,也可进行比较查询。其查询语法与CHAR一致。只是INTEGER型数据不能进行前方一致的查、包含查及位置查,这几种查对数值型数数没有意义。
如前面CHAR中的示例,表TEST的“序号”字段即是一个INTEGER型字段。如:
SELECT * FROM TEST序号=350
则返回第3条记录。
注意,在KBase系统中,数据的表达式书写形式相对比较宽松。上述SQL语名也可写为:
SELECT * FROM TEST序号=’350’
实际上,几乎所有数据类型,都可以用单引号(’ Field Value’)引起来表达,也可以用双引号(”Field Value”
用引号。这里单引号、双引号都必须是ASCII,它们作为特殊符号出现,而不是中文全角的标点引号。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论