在 ASP.NET 早期版本(特別是 1.x 時代)連接 MySQL 或其他資料庫時,常因字元集對應不完整導致中文顯示亂碼。核心問題在於驅動程式內建的 CharsetMap 缺少 gb2312、gbk 等簡體中文編碼的對應關係。
在資料庫連接元件(如 MySQL Connector/NET 的舊版本)初始化對應表時,手動加入缺失的編碼映射:
private static void LoadCharsetMap()
{
mapping = new Hashtable();
mapping.Add("big5", "big5"); // 繁體中文
mapping.Add("sjis", "sjis"); // Shift-JIS
mapping.Add("gb2312", "gb2312"); // 簡體中文 GB2312
mapping.Add("gbk", "gbk"); // 簡體中文 GBK(關鍵補充)
mapping.Add("latin1", "latin1");
mapping.Add("latin2", "latin2");
mapping.Add("latin3", "latin3");
mapping.Add("latin4", "latin4");
mapping.Add("latin5", "latin5");
mapping.Add("greek", "greek");
mapping.Add("hebrew", "hebrew");
mapping.Add("utf8", "utf-8");
mapping.Add("ucs2", "UTF-16BE");
mapping.Add("cp1251", 1251);
mapping.Add("tis620", 874);
mapping.Add("binary", "latin1");
// 其他舊版註釋掉的映射可視需求啟用
}
CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci。Charset=utf8mb4 或 CharacterSet=utf8。<globalization requestEncoding="utf-8" responseEncoding="utf-8" /><meta charset="utf-8" />| 資料庫編碼 | .NET 對應名稱 | 適用場景 |
|---|---|---|
| utf8mb4 | utf-8 | 現代標準,支援 Emoji |
| gbk | gbk / gb2312 | 舊系統簡體中文 |
| big5 | big5 | 舊系統繁體中文 |
| latin1 | latin1 | 西歐語言,不支援中文 |
若維護舊專案無法全面改 UTF-8,補充 CharsetMap 可快速修復;新專案請直接採用 UTF-8 全鏈路,一勞永逸。