記錄項目中 MySQL 資料庫遷移到 Kingbase 的所遇到的問題和解決辦法 LAST_INSERT_ID() kingbase沒有last_insert_id(), 可以在插入語句末尾加入returning [欄位名] 關鍵字獲取 insert into signer_info (user_i ...
記錄項目中 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 差異對比 與 數據遷移