2014年9月30日 星期二

SQL Server Openquery Informix unicdoe db

在SQL SERVER 2008R2 10.50.2500  上建立一個LIKED SERVER連結INFORMIX,OPENQUERY時遇到了一個錯誤

testab中只有一個欄位coltest varchar(40),輸入一個UNICODE的字,查詢後出現錯誤


select * from openquery (ifx_v12,'select * from testab')   

訊息 7339,層級 16,狀態 1,行 1 連結伺服器 'ifx_v12' 的 OLE DB 提供者 'MSDASQL' 傳回無效的資料給資料行 '[MSDASQL].coltest'。

若改用
execute(N'select * from bev') at ifx_v12 


則可執行但回傳的字變成??了


Informix 12.10.FC3WE 64bit dynamic online ,  CLIENT_LOCALE、SERVER_LOCALE、DB_LOCALE皆為zh_TW.uft8


ODBC為 IBM INFOMRIX ODBC 4.10 FD3DE 64bit版本

測試改用OLE DB ,設好後有以下的錯誤。
An exception occurred while executing a Transact-SQL statement or batch. (Microsoft.SqlServer.ConnectionInfo)
Cannot initialize the data source object of OLE DB provider "Ifxoledbc" for linked server "ifx_v12". (Microsoft SQL Server, Error: 7303) 


找了一些參考 http://www.sqlservercentral.com/Forums/Topic564076-17-1.aspx 也無法連結。
一直都是用ODBC設定LINKED SERVER,但之前的INFORMIX DB都是BIG5沒有問題,這次換成UNICODE版本後就無法正常使用OPENQUERY了。

參考幾篇討論,突然發現有人說SQL SERVER不支援UFT8??

再看了幾篇相關的討論文章,東拼西湊後,改回使用ODBC,最後算是找到解法了


1.先進入ODBC  64位元 設定,在Environment 頁籤下,Client Locale設為zh_TW.57372,Database Locale設為zh_TW.57372

2.在Advance頁籤中,勾選 Report Char columns as Wchar columns

3.在IBM Informix Client SDK 4.10 (64-bit)下開啟SetNet32 找到 GL_USEGLU將值設為1 (這個我在ODBC找不到可設定的地方,只能先在SetNet32 下設定)

4.重新啟動SQL SERVER (只要ODBC 參數或SetNet32 值有變動,最好都重啟一下SQL SERVER)

然後OPENQUERY中文字就正常啦,可以select 也可以insert。

沒有留言:

張貼留言

publish error allowDefinition='MachineToApplication'

一個老舊的aspx web form專案,調了一些功能建置成功,但進行部署時顯示以下錯誤。 在應用程式層級之外使用註冊為 allowDefinition='MachineToApplication' 的區段發生錯誤。錯誤的原因可能是虛擬目錄尚未在 IIS 中設定為...