人大金倉 TEXT 轉 JSON 最方便的方式


之前負責的一個項目有使用到 mysql JSON 字段的列,直接通過金倉數據庫提供的遷移工具會導致 JSON 映射的列內的中文字符編碼亂碼,這里提供一個本人測試過的思路解決該問題。

  1. 備份一份需要遷移的 mysql 數據庫。
  2. 將需要轉換的 mysql 數據庫的列從 JSON 類型改為 TEXT 類型。
  3. 使用數據庫遷移工具執行 mysql 到 金倉的數據庫的遷移工作。
  4. 對遷移后的數據列執行 JSON 轉換,具體的 TEXT 到 JSON 轉換語句為 ALTER TABLE <表名> ALTER COLUMN <列名> TYPE JSON USING <列名>::JSON;

如此一來間接的轉換后就不會發生 JSON 列內中文亂碼問題了。
具體亂碼原因為數據庫遷移工具缺少針對 JSON 轉換的中文編碼處理。
之前人大金倉的工程師是通過 mysql 導出為中間表 csv 的形式之后,再通過 csv 導入到 金倉數據庫,非常麻煩,而且如果文件很大導出工作可能會很困難。


其他說明,關於 PostgreSQL 中的語句 ALTER TABLE <表名> ALTER COLUMN <列名> TYPE JSON USING <列名>::JSON;
關於 PostgreSQL 中的 JSON 和 JSONB 區別如下:

jsonb 類型的輸出是對輸入的內容進行了重新格式化,並刪掉了輸入時文本
中的空白。此外,插入記錄時屬性字段的順序信息是不保留的。
jsonb 比 json 多支持的運算符有以下幾個:等值判定運算符(=)、包含關系判定運算符
(@>)、被包含關系判定運算符(<@)、鍵值存在判定運算符(?)、判定一組鍵值中是否有任
意一個已存在的運算符(?|),以及判定一組鍵值中的每一個是否均已存在的運算符(?&)。
jsonb 類型的字段上可以直接建立 GIN 索引
jsonb 不允許其內部記錄的鍵值重復,如果出現重復則會從中自動選擇一條,其余的
重復記錄會被丟棄,但 json 類型中記錄鍵值重復是允許的。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM