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

OLE DB 連接 SQL Server 亂碼終極解決:關閉 AutoTranslate

     編輯:關於SqlServer

現象與微軟官方 Bug 說明

使用 OLE DB (SQLOLEDB) 連接 SQL Server 2000 時,若數據庫排序規則與客戶端代碼頁不同,查詢返回字符變為 ? 或亂碼。微軟確認為 Bug,觸發條件:
1. 連接 SQL Server 2000
2. SSPROP_INIT_AUTOTRANSLATE = TRUE(默認開啟)
3. 列綁定為 DBTYPE_WCHAR

解決方案:連接串關閉 AutoTranslate

在連接屬性 Provider String 中加入 AutoTranslate=no。

PowerBuilder 示例

SQLCA.DBMS = 'OLE DB'
SQLCA.LogID = 'sa'
SQLCA.LogPass = ''
SQLCA.DBParm = "PROVIDER='SQLOLEDB', DataSource='my-server', " & _
               "CommitOnDisconnect='no', " & _
               "ProviderString='Database=mydb, AutoTranslate=no'"

ADO / ADO.NET 通用寫法

' ADO 連接串
"Provider=SQLOLEDB;Data Source=my-server;Initial Catalog=mydb;User ID=sa;Password=;Auto Translate=False"

' ADO.NET (OleDbConnection)
"Provider=SQLOLEDB;Data Source=my-server;Initial Catalog=mydb;User ID=sa;Password=;Auto Translate=False"

原理

AutoTranslate 控制 OLE DB 提供程序是否在客戶端代碼頁與服務器排序規則之間自動轉換字符。關閉後,字符按原始字節傳輸,由應用層自行處理編碼,避免提供程序錯誤轉換導致亂碼。

注意

  • 關閉後需確保應用層正確處理編碼(如頁面 CodePage、字符集設置)。
  • SQL Server 2005+ 版本此問題較少,但同樣適用。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved