天天看點

國産資料庫人大金倉踩坑記錄和函數适配

文章目錄

    • 總體介紹
    • 注意事項(踩的坑)
    • 函數适配(持續更新)
    • 技巧

總體介紹

  • 人大金倉,是國産資料管理軟體與服務提供商。主要服務于電子政務、黨務、國防軍工、金融、智慧城市、企業資訊化等行業。在北京、上海、成都、天津等地設有研發和服務中心。
  • 我們公司主要做電子政務,包括政務OA和政府網站,目前很多省市的網站項目招标,都要求國産化适配,例如國産資料庫金倉、達夢等、國産伺服器東方通等。
  • 本次測試使用人大金倉

    V8

    版本,為人大金倉最新版,我們公司和金倉公司有直接的技術對接。
  • 項目程式使用java語言,使用hibernate5。

注意事項(踩的坑)

  • 必須針對資料庫名稱,建立使用者名,賦予權限。否則即使設定default_schema,hibernate在執行原生的sql時也會報錯“

    com.kingbase8.util.KSQLException: 錯誤: 關系 "cms_base_content" 不存在

    ”。例如項目資料庫名

    project_oa

    ,則必須使用使用者名為

    project_oa

    連接配接。
  • V8預設oracle風格,主鍵生成政策預設序列

    SEQUENCE

    ,轉庫後需要手動添加序列

    hibernate_sequence

    。我們是由mysql轉金倉的,偏向于使用

    IDENTITY

    政策。目前不支援根據配置選擇預設主鍵政策,已将問題回報給金倉開發人員,暫未提供根據配置篩選。
  • 對現有資料庫轉庫時,轉庫程式沒有轉換視圖,視圖需要手動添加
  • 字元串判空問題,我們使用的版本金倉直接把空字元串當成null,這樣在sql裡使用

    a = ''

    判斷空就會有問題。這個可以自己修改配置,來确定字元串的空值類型。需要改一下資料庫data目錄下的

    kingbase.conf

    檔案;添加 參數

    ora_input_emptystr_isnull=off

    ; 重新開機資料庫 生效
  • 針對mysql轉金倉時,可能會将

    tinyint

    轉為

    boolean

    類型,導緻程式報錯,需要在金倉庫裡,将這些布爾類型,改為tinyint。可以在mysql裡導出整個庫的結構的sql,搜尋tinyint,這樣的字段應該不多。已經将問題回報給金倉技術人員,暫未解決。
  • 金倉支援oracle風格的

    start with connect by

    查詢樹形結構的資料,但是hibernate執行時有警告

    warn

    ,這個不影響查詢結果,可以忽略
  • 金倉sql不支援符号“`”,可以使用引号,或者不加符号。
  • 金倉SQL對于GROUP BY比MySQL要求更嚴格,字段必須出現在 GROUP BY 子句中或者在聚合函數中使用,才可以在結果裡展示

函數适配(持續更新)

  • 總體來說,資料庫适配過程中,需要對代碼改動的,主要是不同的資料庫對函數的支援不同,同一個函數或同一個功能,MySQL和Oracle的都可能不一樣,此前代碼對這兩大主流資料庫做了适配。此次金倉适配,比較耗時間的代碼修改工作,也主要來自這個。
  • 這個隻是目前遇到的一部分,後續如果有新的函數适配,會繼續更新
  • date_format

    無法識别,但是

    to_date

    to_char

    支援,需要使用oracle風格的寫法
  • trunc

    處理日期函數,在金倉裡不可以,需要使用

    date_trunc

  • trunc

    處理日期相減的值,不支援,可以使用

    to_number

  • datediff

    函數不支援,可以使用

    to_number和date_trunc

    結合使用
  • oracle 的

    ifnull

    需要使用

    ISNULL

  • oracle 的

    CONVERT

    函數,金倉不支援,可以使用

    trunc

    ,但是這個需要給一個參數,表示小數位數

CONVERT (t.count / 5090 * 100,DECIMAL ( 15, 3 ))

改為

trunc(t.count / 5090 * 100, 3)

技巧

  • 對于金倉資料庫支援的函數問題,或者SQL文法問題,可以在金倉資料庫管理工具裡的幫助文檔裡檢視
  • 幫助(H)

    -

    幫助文檔

    ,點選菜單即可檢視文檔。此文檔是管理工具自帶的,是金倉提供給開發人員或資料庫管理者的幫助文檔,你可以按照需要浏覽或搜尋,很多疑問都可以在此處得到解答。
  • 例如,針對

    date_format

    函數适用性,可以搜尋文檔,得到結果,發現不支援。可以繼續搜尋“日期格式”等關鍵詞,去查找結果。對于得到的多條結果,可以點選左側導航選擇,再使用

    CTRL + F

    二次搜尋文字位置,進行檢視。
    國産資料庫人大金倉踩坑記錄和函數适配
    國産資料庫人大金倉踩坑記錄和函數适配