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

SQL Server ntext 欄位透過 JDBC-ODBC 橋接讀取中文亂碼根因與解決

     編輯:關於SqlServer

問題背景

  • 純 Java JDBC 驅動 (sqljdbc.jar) 讀 ntext 正常。
  • JDBC-ODBC Bridge (sun.jdbc.odbc.JdbcOdbcDriver) 讀 ntext 出現亂碼。
  • getObject() 讀 uniqueidentifier, text, nchar 回傳 null,僅 getString() 正常。

根因分析

ntext 為 Unicode 大物件 (最高 2GB),SQL Server 內部以 UTF-16 Little Endian 儲存。JDBC-ODBC Bridge 未正確處理碼頁轉換,導致位元組序誤讀。

解決路徑

  1. 位元組陣列重新解碼:
    byte[] bytes = rs.getBytes(colIndex);
    String val = new String(bytes, "UTF-16LE");

    測試確認 UTF-16LE 可還原純中文。
  2. 混雜標點/英文仍亂碼:Bridge 層對複合字元處理不一致,建議改用 getString() 並配合 ODBC DSN 設定 「將字元資料轉譯為 Unicode」 選項。
  3. 根治建議:棄用 Bridge
    • Microsoft JDBC Driver / jTDS 皆完整支援 ntext、nvarchar(max)。
    • 若必須支援 Excel/Access/文字檔,改用 Apache POI、Jackcess、OpenCSV 等純 Java 函式庫,避免 ODBC 相依。

最佳實踐總結

場景建議方案
SQL Server 2005+Microsoft JDBC Driver 4.0+ / jTDS 1.3+
SQL Server 2000Microsoft JDBC Driver 3.0 (舊包 msbase/mssqlserver/msutil)
異構資料來源專用純 Java Library (POI, Jackcess, OpenCSV...)
舊系統必須用 ODBCDSN 勾選 Unicode 選項 + 程式碼統一用 getString()
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved