C#连接Mysql数据库,执行ExecuteNonQuery()中文出现乱码
背景交代:
mysql在服务器上是linux环境下的,我本地测试是windows环境
在本地测试时中文插入显示正常,放到服务器就乱码
如下图容易出现中文乱码的代码:
以下代码支持以事务方式批量执行sql语句,提升执行效率

public void ExecuteSqlTran(List<string> SQLStringList) { //本地测试连接 //string connectStr = "Data Source=127.0.0.1;Initial Catalog=22222;User ID=root;Password=1111;SslMode=none;"; using (MySqlConnection conn = new MySqlConnection(connectStr)) { conn.Open(); MySqlCommand cmd = new MySqlCommand(); cmd.Connection = conn; MySqlTransaction tx = conn.BeginTransaction(); cmd.Transaction = tx; try { for (int n = 0; n < SQLStringList.Count; n++) { string strsql = SQLStringList[n].ToString(); if (strsql.Trim().Length > 1) { cmd.CommandText = strsql; cmd.ExecuteNonQuery(); } //后来加上的 if (n > 0 && (n % 500 == 0 || n == SQLStringList.Count - 1)) { tx.Commit(); tx = conn.BeginTransaction(); } } //tx.Commit();//原来一次性提交 } catch (System.Data.SqlClient.SqlException E) { tx.Rollback(); throw new Exception(E.Message); } } } #endregion
按照网上很多前辈经验
排查了数据表创建时的字符集
尝试在插入语句中文字符的前面加N,都没有效果
后来看到这个下面那篇文章,只需在连接字符串里限定字符集类型为uft8,修改后测试可以正常看到中文
Data Source=127.0.0.1;Initial Catalog=2222222;User ID=root;Password=11111111;SslMode=none;charset=utf8
或
Data Source=127.0.0.1;Initial Catalog=2222222;User ID=root;Password=11111111;SslMode=none;charset=utf8mb4