首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> Oracle 資料庫 >> Oracle 資料庫基礎

跨平台 Oracle 遷移字元集亂碼問題根因分析與解決之道

     編輯:Oracle 資料庫基礎

Windows NT (ZHS16GBK) → Digital Unix (ZHS16CGB231280) 遷移中,中文資料變「????」導致主鍵衝突。本文完整記錄排查過程、字元集不相容根因與最終解決方案。

環境與現象

  • 源:Oracle 8.0.5 NT,NLS_CHARACTERSET=ZHS16GBK
  • 標的:Oracle 8.0.4 Digital Unix,NLS_CHARACTERSET=ZHS16CGB231280
  • 現象:imp 匯入報 ORA-02437 primary key violated,中文欄位顯示「????」,但手動修改可正常顯示中文,證明標的資料庫可儲存中文,問題在匯入轉換。

關鍵發現

  1. 標的主機自帶 imp/exp 無法正確處理源端 GBK 編碼匯出檔。
  2. 在源端 NT 使用 imp80/exp80 遠端連線標的資料庫匯入/匯出,完美解決。
  3. 將標的字元集改回 ZHS16CGB231280 後,遠端 imp80 仍成功,說明 ZHS16CGB231280 可相容 ZHS16GBK。

最佳實踐總結

  • 跨平台遷移含中文資料:在源端(Windows)使用源端 exp/imp 工具遠端操作標的資料庫。
  • 勿在 Unix 主機直接執行 Unix 版 imp/exp 處理來自 Windows 的匯出檔,會導致字元集轉換失敗(IMP-00016)。
  • 備份/還原 Unix 端資料庫:同樣應從 Windows 端遠端執行 exp80/imp80。

核心原則:匯出工具版本與平台應與源資料庫一致,匯入工具版本與平台應與源資料庫一致,由源端發起遠端操作,避免中介平台字元集轉換錯誤。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved