大家好,我是考100分的小小码 ,祝大家学习进步,加薪顺利呀。今天说一说MySQL5.7 迁移到 KingBase V8 (人大金仓数据库)「终于解决」,希望您对编程的造诣更进一步.
记录项目中 MySQL 数据库迁移到 Kingbase 的所遇到的问题和解决办法
- 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值。
- 已有表和系统表名称重复
需要迁移的数据库中有张表名称为sys_config
,查询的时候查询结果不符合我们的预期,经咨询金仓售后人员后得知和系统表重名…
解决问题方法如下:
alter database [数据库名] set search_path to "$user", [模式名,] public, sys, sys_catalog, pg_catalog;
select sys_reload_conf();
执行完sql后要生效得重启下服务,重新获取数据库连接。
- 传空字符串被当作null
##查看空字符串的处理方式―如果为 on则空字符串与会当做null处理,需要修改为 off
show ora_input_emptystr_isnull;
##将此设置关闭
alter database casecheck_new set ora_input_emptystr_isnull to "off " ;
##重新载入配置
select sys_reload_conf( ) ;
- 其他问题
其他问题可参考这篇博客
–kingbase V8(人大金仓数据库) 与 mysql 的 sql 差异对比 与 数据迁移
原文地址:https://www.cnblogs.com/huizhipeng/archive/2022/04/27/16200631.html
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
转载请注明出处: https://daima100.com/5329.html