問題描述:
使用ASP.NET寫了一個問卷調查系統,使用註冊,創建問卷等向數據庫插入中文字符時,mysql數據庫中亂碼了。但是從數據庫從讀取的中文字符可以正常的顯示。在數據庫中是可以正常的插入中文字符。
-------------------------------------------------------------------------------------------------------------------------------------------------
以下是我的解決思路:
1.查看亂碼問題是從前臺到後臺中出現,還是後臺到數據庫中出現的。經過調試,從前臺傳入的字符是正常的。是插入到數據庫中出現的。
2.更改數據庫字符集:
查看數據庫的字符集,將Latin1改爲utf8,確保數據庫和表的字符集也是utf8。
將所有的character_set_xxx更改爲utf8之後,中文字符在數據庫中又插入不進去了。於是,set names gbk;解決了該問題。具體原因見:https://blog.csdn.net/Qiana_/article/details/90639347
如下截圖是最新版本設置。
結果是亂碼問題並未解決。
3.同一頁面編碼:
在ASP.NET的Web.config中的<system.web>標籤內,添加
<globalization requestEncoding="utf-8" responseEncoding="utf-8" culture="zh-CN" fileEncoding="utf-8"/>
還是沒有解決。
4.在連接字符串中設置編碼Charset=utf8
<connectionStrings>
<add name="myconnstring" connectionString="server=localhost;DataBase = survey;User Id = root;Password = XXX;Charset=utf8;" providerName="MySql.Data.MySqlClient"/>
</connectionStrings>
結果問題解決了,可以正常的插入中文了。
-------------------------------------------------------------------------------------------------------------------------------------------------------------------
插入一句,ASP.NET從MySQl數據庫中讀取數據亂碼問題:
1.可以在connectionStrings中加入Charset=utf8
2.如果不能解決亂碼問題,那麼可以將讀取出數據編碼格式進行轉換。
參考自:https://www.cnblogs.com/zzxbest/archive/2010/11/22/1883967.html
//讀出時進行轉換
public string ISO8859_GB2312(string read)
{
//聲明字符集
System.Text.Encoding iso8859, gb2312;
//iso8859
iso8859 = System.Text.Encoding.GetEncoding("iso8859-1");
//國標2312
gb2312 = System.Text.Encoding.GetEncoding("gb2312");
byte[] iso;
iso = iso8859.GetBytes(read);
//返回轉換後的字符
return gb2312.GetString(iso);
}