天天看点

gbase使用中遇到的bug(如果有可能,尽量避免使用 GBase数据库,相对达梦等国产数据库,实在太差劲)

郑重声明:如果有可能,尽量避免使用 GBase数据库,相对达梦等国产数据库,实在太差劲.

多个版本之间不能平滑升级,跟IE有一拼,A 版本支持的B版本可能就不支持.

迫于形势必须使用的话,则只能咬牙忍受了.

1.之前使用8t版本遇到 TOP 函数问题,开发环境支持,线上版本不支持

  而且数据库都是 8t,但是8t也有不同的版本,所以..............

  根据目前的情况 gabse对 first 函数兼容性更好(用于获取前N条数据)

2.8s版本遇到,  select MAX(org_code) from SYS_ORGAINZE where ORG_CODE like 'LS%' ; 该语句结果为null

select avg(1),MAX(org_code) from SYS_ORGAINZE where ORG_CODE like 'LS%' ;  或者  select MAX(org_code) from SYS_ORGAINZE where ORG_CODE like '%LS%' ; 则正常

整体来说就是版本多还混乱,各个版本还是不同团队维护.像ie各个版本不兼容,但没那么夸张.

3.数据迁移困难,不管往其他数据库还是迁移到gbase都比较麻烦,就连gbase之间的迁移都需要停库,执行一串服务器脚本,后来gabse给提供了迁移脚本,gbase之间导出导入稍微好受点

4.客户端,驱动错误提示极差,大部分只会告诉你SQL有语法错误,然后就没了,需要自己好好审阅SQL

比如它本身导出的sql他不认(智障!!!),主要出现在datetime字段上,必须是 

DATETIME           YEAR TO FRACTION(5)   如果有默认值则如下

 DATETIME           YEAR TO FRACTION(5) DEFAULT CURRENT YEAR TO FRACTION(5)

5.数据库单用户多实例,虽然可以建立其他用户,但会导致很多问题,比如PageHelper需要注册新的用户名,比如hibernate需要注册新的

Dialect等,虽然改动不大,但是很不爽
           

6.数据库不支持字段注释

7.gbase  text字段不能通过sql语句插入,只能通过程序或者客户端修改(是不是很傻?)

    客户端修改的时候不能直接修改,只能粘贴,客户端不能通过sql修改

    或者是删除重建,直接使用lvarchar,长度基本也够用

    varchar目前最大只能255,这个根据实际情况使用

     text字段不能更改字段类型,不管数据库有没有数据,oracle也是这样的,还可以接受吧

8.查询系统所有表时,select * from systables,但是informix驱动或者gbasedbt(informix  8s版本)驱动,分别添加了前缀 informix/gbasedbt 所以如果使用其他用户调用系统的方法可能会出现问题

此外,某些查询可能会出问题,比如,有大文本字段的,但仅限于某些版本,有的版本可以,迷一样的库

gbase使用中遇到的bug(如果有可能,尽量避免使用 GBase数据库,相对达梦等国产数据库,实在太差劲)

9.数据库  字段/表别名不能加引号

gbase的 SQL  里支持 字段 和 表名 添加表名时 ,() 代表 可有可无, 可以

     字段名  (AS)  字段别名

     表名     (AS)  表别名 

 但 ORACLE ,() 代表 可有可无,只能   

    字段名  (AS)  字段别名

     表名   表别名 

 ORACLE  字段  ,表 亦可以 别名添加双引号  ,() 代表 可有可无

     字段名  (AS)   "字段别名"

     表名  "表别名"

select A.lhbm as aaa,jhbm as bbb from TY_LHJHNM as A join  ty_lhjhnmzb as B on a.lhbm=b.lhbm

10.gbase的递归和oracle一样

            SELECT   *

FROM     TREES 

         START WITH parentId =0

         CONNECT BY PRIOR id=parentId

         ORDER BY id desc

11.gbase数据库在数据完全一样的时候

(数据库没主键肯定是设计有锅,这个跑不了)

   发现这个问题,想拨乱返正,现在讨论gabse方面:

       不好意思,不能删除,是否定制唯一键? 或者使用全部列?

       然后...............不好意思数据重复不能定制唯一键,不能删除,我去年买了个表!

      如果嫌这个提示烦,以后不再提示的话.那恭喜你中奖了

             如果有N条完全一样的数据,重复了一遍,目前总共是2N ,假设将这2N条查询出来

   ,并且删除其中重复的,只保留不重复的N条,CTRL  +  S 后,数据全部被删除了,2N都没了

    特别提示:gbase是自动提交的,谨防手残,千万记得左上角的  AUTO

   这个问题有2个解决方案:

          1.通过 distinct 筛选重复数据,添加到新表,此时可筛选掉主键重复的数据

        在新表设置主键,再通过SQL去除其他重复数据,比如id不同的,但是其他业务唯一的数据重复的

             或不同创建/修改时间的数据等

          2.可通过rowid 进行数据删除

     此外,发现在用程序执行更新的时候,如果没有where条件,且这个表里有text等大文本字段时,更新会报错,提示  Blobs are not allowed in this expression.  加上后就好了,猜测是跟更新的时候一样,没主键就用全部字段做条件了,然后大文本字段做条件会有问题,大概是这样,加上主键字段做条件后就好了

12.gbase会自动断开连接,比如几分钟后,客户端连接中断,需要重新连接,此时需要重新选库,然后会卡半天(大概几十秒或者个把分钟)

如果直接执行查询,也是卡半天,然后告诉你需要重新连接

13.gbase客户端也比较差

  在测试连接, 连接数据库 ,编辑表切换库, 展开全部表等情况下,明显比其他库慢很多,不过这个主要是客户端问题

 除 编辑表 外,均可通过换其他客户端解决,就算编辑表 也会比官方客户端快很多(慢还容易卡死),这点,颇为无语

   这个软件是dbeaver,配置稍有麻烦,不过用起来好用多了  

数据库界的IE:大清灭亡辣