达梦数据库6.0之数据类型使用体验

时间:2021-05-02

登陆达梦数据库:C:\dmdbms\bin>isqlisql V6.0.2.51-Build(2009.12.23)SQL>loginserver name:localhostuser name:testpassword:port:12345dm_login time used:190.370(ms)

首先看一下字符类型CHAR和VARCHAR:

达梦为了兼容Oracle的字符类型,因此VARCHAR2这种Oracle特殊的类型也是支持的。和Oracle不同的是,CHAR类型和VARCHAR类型的最大长度都是8188,但是这个值并不是固定的,当数据库页面大小不同的时候,这个最大值也是不固定的,比如32K页面大小,字符类型CHAR或VARCHAR的最大值是8188,而如果是16K页面大小,则字符类型最大值是8000,对于当前8K页面大小,字符类型最大值只有3900,而如果页面大小为4K,则字符类型最大长度只要1900。

对于Oracle数据库而言,CHAR类型最大值是2000而VARCHAR2是4000,虽然达梦数据库绝大部分情况下,都比这个范围要大,不过个人并不认为这是一个很好的设计。不同数据库之前的迁移对于一个成熟系统而言是很常见的,而不同数据库的页面大小不同也是很平常的事情,达梦的这种设计虽然使得不同页面的最大值尽量扩大,但是却给不同页面间数据库的迁移埋下了问题。当数据库向页面更大的数据库迁移不会存在问题,但是反之可能造成表无法创建、数据丢失或数据被截断的情况。而且感觉达梦数据库在实现VARCHAR类型的时候还有一定的问题:

至此没有问题,VARCHAR类型中的空ge被保留,但是对VARCHAR类型进行查询的时候:

显然在比较的时候,空ge是没有被考虑在内的,这对于CHAR类型是没有问题的,但是VARCHAR类型似乎并不应该具有这样的特性:

显然在达梦中即使VARCHAR类型的字段也认为’a’和’a_’(这里用下划线来标识空ge)是相等的,这种情况会引发歧义,我们认为已经相等的数据在经过相同的处理后就会变得又不相等了:

 下面看看数值类型:

虽然达梦支持数值类型NUMBER和Oracle的NUMBER类型十分相似,但是二者还是有区别的,显然达梦不支持标度小于0的情况,而且不支持精度小于标度的情况,而这些情况在Oracle中都是支持的,下面是Oracle中的情况:

虽然NUMBER类型和Oracle的NUMBER类型并不完全一致,但是二者对于精度和标度的描述还是一致的。不过Oracle如果NUMBER不指定精度,则默认是38,而在达梦中,默认是20。

第2行: '*'附近有语法错误,另外达梦中也不支持NUMBER(*, 0)的写法。达梦和SQLSERVER、SYBASE等数据库一样,对于表示整数的数据类型实现了自增列:

接着看看达梦数据库的时间类型:

达梦数据库中的DATE和Oracle中的DATE有本质的区别,这一点似乎和SQLSERVER中的DATE类型比较相似。它把日期和时间分成了两个部分,对应两种不同的类型DATE和TIME,DATE的精度只到天,而TIME的精度到毫秒。达梦中也有即包括年月日也包括时分秒的数据类型DATETIME,也就是TIMESTAMP类型。不过这个类型和Oracle的DATE不同,它包含毫秒信息,相比较和Oracle的TIMESTAMP类型更相似一些,不过Oracle的TIMESTAMP不但支持到微秒,而且还可以包含时区的信息。还有一点也是达梦的时间类型所不支持的,公元前的日期:

达梦支持多种INTERVAL类型的时间,虽然提供的类型比Oracle提供的要多很多,但是本质上并没有增加什么额外的新类型。有一点需要注意,两个Oracle日期类型相减后得到的是一个NUMBER类型的数值,表示的是两个日期相差的天数,而达梦中得到的是INTERVAL类型。下面简单介绍一下大字段类型,在达梦数据库中被称为多媒体类型:

TEXT类型类似Oracle中的LONG,不过没有LONG那么多的限制。TEXT、BLOB和CLOB的最大长度都是2G-1,相当于Oracle LONG字段的长度,比8i中的BLOB和CLOB长度小了一半。在达梦数据库中没有BFILE对应的数据类型。达梦还提供了Oracle在SQL类型中没有支持的BOOLEAN类型:

可以看到,达梦数据库对于NULL的布尔逻辑判断和Oracle中是不同的,在Oracle中,NULL & 0结果是FALSE,而NULL | 1结果是TRUE。在达梦中,NULL进行任何布尔运算的结果都仍然是NULL。此外达梦数据库对于位操作提供了很多方便的函数,比如按位与、按位或、异或等,在位操作方面确实比Oracle提供的函数要全面得多。

本文源自:翔宇亭——IT乐园(http://),转载请保留此信息!

声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。

相关文章