ASP.NET AJAX MSSQL MYSQL 技术交流区

Bullion技术交流BLOG

博客园 首页 新随笔 联系 订阅 管理
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设置编码

  /// <summary>
        /// 更新一条数据
        /// </summary>
        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)
            {
            }
        }

posted on 2007-02-04 17:14  bullion  阅读(972)  评论(0)    收藏  举报