最近在處理資料遷移的時候遇到了字符集不一致的問題,搞得很是頭疼,程序如下
有新老兩臺服務器,字符集其實是一樣的都是AMERICAN_AMERICA.AL32UTF8
但是NLS_NCHAR_CHARACTERSET卻不一樣,老機器上是AL16UTF16,新機器上是AL32UTF8,恰好我們的系統資料表很多都是NVARCHAR型別的欄位,于是乎資料從老機器遷移過去后全是亂碼,新機器也已經用了一段時間了,不可能重裝,這就遇到個進退不得的問題,兩邊現在都有資料,且都有不兼容的字符集欄位。
嘗試了exp/imp,sql匯出/匯入,csv匯出/匯入,都解決不了亂碼的問題
最后用了復制黏貼想試試,就是從一個表里直接把資料復制到另一個庫的表里,隨后發現了一個匪夷所思的問題。
當我select * from table1;時出來的依然都是亂碼的顯示。
但是當我select * from table1 for update;時顯示卻是正常的,亂碼沒有了。
反復試了幾次都是這樣,換不同的工具也是如此。這真是重繪了我對oracle的認識了,哪位能解答一下
uj5u.com熱心網友回復:
國家字符集 一般都是 AL16UTF16。。這個情況還真不好搞
uj5u.com熱心網友回復:
最終是通過修改表的欄位型別,勉強導成功了,但是弊端是整個上游系統所需的核心表的欄位型別都被改掉了,還需要逐一驗證新表對上游系統的影響。國家字符集只影響NCHAR,NVARCHAR,轉換成CHAR,VARCHAR之后可以消除亂碼問題。轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/34671.html
標籤:基礎和管理
上一篇:sql表連接判斷
