MySQL5.7迁移到KingBaseV8(人大金仓数据库)

database

记录项目中 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 差异对比 与 数据迁移

以上是 MySQL5.7迁移到KingBaseV8(人大金仓数据库) 的全部内容, 来源链接: utcz.com/z/536454.html

回到顶部