• MySQL5.7 迁移到 KingBase V8 (人大金仓数据库)


    记录项目中 MySQL 数据库迁移到 Kingbase 的所遇到的问题和解决办法

    1. LAST_INSERT_ID()

      kingbase没有last_insert_id(), 可以在插入语句末尾加入returning [字段名] 关键字获取

    insert into signer_info (user_id, user_name) values( 123, 'wang') returning id;
    

      但是在Mybatis上使用<insert>标签进行上面sql的插入的话,会发现并不能得到我们想要的结果,数据会正常的插入到数据库中,但是我们期望的返回值并不是当前插入对象的id值,而是-1

    <!-- mapper 中的sql -->
    <insert id="createRecord" parameterType="*.*.*">
        <selectKey  keyProperty="id" resultType="int" order="AFTER">
        select LAST_INSERT_ID()
        </selectKey>
        INSERT INTO signer_info 
            user_id,  user_name,
        values
            #{userId,jdbcType=INTEGER},#{userName,jdbcType=VARCHAR}
    </insert>
    

      应该修改为

    <select id="insertSelective" parameterType="*.*.*"
      		resultType="java.lang.Integer" flushCache="true">
        INSERT INTO signer_info 
            user_id,  user_name,
        values
            #{userId,jdbcType=INTEGER},#{userName,jdbcType=VARCHAR}
        returning id
    </select>
    

      这样接口方法的返回值就为当前插入值的id值。

    1. 已有表和系统表名称重复

      需要迁移的数据库中有张表名称为sys_config,查询的时候查询结果不符合我们的预期,经咨询金仓售后人员后得知和系统表重名...
    解决问题方法如下:

    alter database [数据库名] set search_path to "$user", [模式名,] public, sys, sys_catalog, pg_catalog;
    select sys_reload_conf();
    

      执行完sql后要生效得重启下服务,重新获取数据库连接。

    1. 传空字符串被当作null
    ##查看空字符串的处理方式―如果为 on则空字符串与会当做null处理,需要修改为 off
    show ora_input_emptystr_isnull;
    ##将此设置关闭
    alter database casecheck_new set ora_input_emptystr_isnull to 'off ' ;
    ##重新载入配置
    select sys_reload_conf( ) ;
    
    1. 其他问题

      其他问题可参考这篇博客
      --kingbase V8(人大金仓数据库) 与 mysql 的 sql 差异对比 与 数据迁移

  • 相关阅读:
    8.11记---我来啦!
    关于博主
    CSP-S 2019 第二轮 游记 AFO
    读入优化
    CSP-S 2019 第一轮 游记
    2019国庆正睿成都集训
    成外集训小记
    收藏夹(持续更新)
    博客建成
    博客施工中,敬请期待
  • 原文地址:https://www.cnblogs.com/huizhipeng/p/16200631.html
Copyright © 2020-2023  润新知