記錄專案中 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.uj5u.com/shujuku/466077.html
標籤:其他
下一篇:管理控制臺權限控制
