[DotNet] 連線至 MySQL 資料發生亂碼解決方案
最近公司與某一廠商合作,該廠商 DB 使用 MySQL,由於該系統預設語系為 latin1,故導致使用 DotNet 程式使用 MySQL 原廠提供之 Connector/Net 5.2 進行
呼叫 MySQL DB 時,在中文部份會回應亂碼情況。
筆者搜尋 Google 大神得知需更改 MySQL 預設語系為 big5 或 UTP8,也發現不少人在尋問跟我一樣的問題:「可以不修改預設語系就能取得正確的語系回覆?」
經深入了解得知若要解決此問題,需於與 MySQL DB 建立連線時,就需指定連線的語系(有關建立連線的方法很多文章寫過,故在此不再加己陳述),
基於科技始於人性「懶」,筆者進一步查詢是否有可以不修改 MySQL DB 設定,亦不需指定連線使用之語系的方法呢?
皇天不負苦心人,那就是使用『MySQLDriverCS』 這套件,這套件是以 C 語言底層概念實作於 DotNet 平台上,然後通過 InteropServices 進行訪問。
使用 MySQLDriverCS 步驟如下:
一、下載 MySQLDriverCS 程式:
筆者是下載 4.0.1 版(MySQLDriverCS-n-EasyQueryTools-4.0.1-DotNet2.0.exe)
二、安裝 MySQL DB:(預設安裝即為 latin1 語系)
筆者是使用 5.1.5 版(mysql-connector-odbc-5.1.5-win32.msi)
三、C# 程式範例程式:
1. 將 MySQLDriverCS.dll 參考於專案中。
2. 於 App.config 或 Web.config 之 connectionStrings 標籤內新增以下連線資訊:
<add name="<Area Name>" connectionString="Location=<Database Address>;Data Source=<Database Name>;User ID=<User>;Password=<Password>;"/>
Ex:(以下為範例)
Area Name = Test
Database Address = 127.0.0.1
Database Name = TTT
User = TestUser
Password = TestTest
<add name="Test" connectionString="Location=127.0.0.1;Data Source=TTT;User ID=TestUser;Password=TestTest;"/>
3. 進行程式連線測試:
1: using (MySQLConnection objConn = new MySQLConnection(ConfigurationManager.ConnectionStrings["Test"].ConnectionString))
2: {
3: objConn.Open();
4:
5: using (MySQLCommand objCmd = (MySQLCommand)objConn.CreateCommand())
6: {
7: objCmd.CommandText = "SELECT * FROM TTT.dbo.TestTable";
8:
9: using (MySQLDataReader objDr = (MySQLDataReader)objCmd.ExecuteReader())
10: {
11: if (objDr.HasRows)
12: {
13: if (objDr.Read())
14: // 印出資訊
15: }
16: }
17: }
18: }
參考資源:實用的 Connection String 網站 (ConnectionStrings.com)