摘要: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)的設定:輸入自訂的dsn、ip、帳密、port 即可,其它用預設值
