Mysql 4.1.22中文亂碼解決

  • 4596
  • 0

摘要:Mysql 4.1.22中文亂碼解決

/*

----案例SQL2005下設Linked server(Mysql 4.1.22 Stardard)中文亂碼問題

參考:

http://support.microsoft.com/kb/232580/zh-tw

http://tlcheng.spaces.live.com/blog/cns!145419920BFD55A7!763.entry

 

Unicode僅是個總稱,具有多種形式的編碼,各種編碼還是不盡相同的。

Sql Server的Nvarchar,nchar欄位,是採用Ucs-2這種編碼的,和Utf-8這種可變多位元組的編碼形式是不一樣的。

SQL Server 通常以UCS-2 编碼方案儲存Unicode

*/

-----背景

MYSQL: Mysql 4.1.22 Stardard

   相關參數:

   character_set_client       utf8

   character_set_connection  utf8

   character_set_database    latin1

   character_set_results     utf8

   character_set_server       latin1

   character_set_system       utf8

 

 

心得:採用mysql odbc connector(3.51 or 5.1)直接select中文欄位會發生錯誤訊息:傳回無效的資料給資料行

     故先將欄位資料轉成二進位,就可將所有資料全部select出來,而中文字的二進位碼(binary)卻有編碼的問題

     ps:根據網路搜尋SQLServer 使用不同的Unicode編碼方式(UCS-2),所以無法將UTF-8 識別為有效的字元資料

     所以即使將在(navicate or mysql)可正確解出中文的binary放在sqlserver上執行,也解不出正確中文

 EX:

   鮮奶豬豬 0xE9AEAEE5A5B6E8B1ACE8B1AC--mysql下編碼

             0xC241A5A4BDDEBDDE          --MSSQL下編碼

 

所以經實驗目前有效方法如下:     

 

select*

fromopenquery(MAT51, --請使用mysql ODBC connector 5.1版

 'select convert(binary(rolename) using utf8)  from fox_cb.game_role')

 

Connector(5.1)的設定:輸入自訂的dsnip、帳密、port 即可,其它用預設值