ASP.NET + MYSQL 最烦恼的就是编码的问题了..., 遇中文就出现乱码, 调了很久, 今天终于解决编码问题了..
从MySQL 4.1开始引入的多语言支持确实很棒,不过操作MySQL数据库会造成乱码,即使是设置过了表字符集也是如此。 网上找了很多遍一直没有找到解决方案, 直到今天看到一篇文章, 终于解决了我长久以来的困扰, http://info.mysql.cn/php/2006/0208/74.html
MySQL 4.1以上的字符集支持(Character Set Support)有两个方面:字符集(Character set)和排序方式(Collation)。对于字符集的支持细化到四个层次: 服务器(server),数据库(database),数据表(table)和连接(connection)。
其实问题就出在connection连接层上。解决方法是在发送查询前执行一下下面这句:SET NAMES 'utf8';
它相当于下面的三句指令:
SET character_set_client = utf8;
SET character_set_results = utf8;
SET character_set_connection = utf8;
具体实现:
#region MySQL设置编码
public static void MySQLSetCharcter(com.common.db.DataMySQLAccess da)
{
da.ExecuteSql("SET NAMES 'utf8';");
}
#endregion MySQL设置编码
///
/// 更新一条数据
///
public void Update(object model)
{
try
{
//更新时先执行这句, 再执行更新
MySQLSetCharcter(da);
StringBuilder strSql = new StringBuilder();
strSql.Append("update meirongwang.MenuLable set ");
strSql.Append("Title=?Title,");
strSql.Append("URL=?URL,");
strSql.Append("pid=?pid,");
strSql.Append("rootid=?rootid,");
strSql.Append("orderbase=?orderbase");
strSql.Append(" where id=?id");
MySqlParameter[] parameters = {
new MySqlParameter("?id", MySqlDbType.Int32),
new MySqlParameter("?Title", MySqlDbType.String)};
parameters[0].Value = obj.id;
parameters[1].Value = obj.Title;
da.ExecuteSql(strSql.ToString(), parameters);
}
catch (MySqlException sqlex)
{
}
}