且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

MYSQL使用存储过程插入中文数据的疑似bug(UTF8)

更新时间:2022-03-12 20:16:10

数据库Connection和字段的字符集都采用utf-8.
开始使用存储过程插入数据,代码大约如下
               MySqlCommand cmd = new MySqlCommand("apend_testproject",
                   new MySqlConnection(cConnectMySqlHelp.GetConnectStr().ConnectionString));
                commonfunc.logfile(cmd.Connection.ConnectionString);
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.Parameters.Add(new MySqlParameter("_PM", _PM));
                cmd.Parameters.Add(new MySqlParameter("_PUBLISH_TIME", _PUBLISH_TIME));
                cmd.Parameters.Add(new MySqlParameter("_PRODUCT_LINE", _PRODUCT_LINE));
                cmd.Parameters.Add(new MySqlParameter("_NAME", HttpUtility.UrlDecode(_NAME)));
                cmd.Parameters.Add(new MySqlParameter("_PROGRESS", 100));
                cmd.Parameters.Add(new MySqlParameter("_TEST_SUB_TIME", _TEST_SUB_TIME));
                cmd.Parameters.Add(new MySqlParameter("_PROJECT_TYPE", _PROJECT_TYPE));
结果数据库表中显示乱码,很郁闷,以为是字符集编码的问题,去网上找了些资料说可以如下操作,意思是
在connectstring里边加入字符集说明utf-8
         public static MySqlConnectionStringBuilder GetConnectStr()
        {
            MySqlConnectionStringBuilder connBuilder =
            new MySqlConnectionStringBuilder();
            connBuilder.Add("Database", "testplat");
            connBuilder.Add("Data Source", "10.2.226.20");
            connBuilder.Add("User Id", "root");
            connBuilder.Add("Password", "");
            //connBuilder.Add("charset", "utf8");
            return connBuilder;
        }
结果还是错误。实在没有办法,根据测试直觉,是不是由于存储过程是在数据库端,所以,,,,那么直接写Sql调用试试,
代码如下
  MySqlCommand cmd = new MySqlCommand();
                cmd.CommandType = CommandType.Text;
                cmd.Connection = new MySqlConnection(cConnectMySqlHelp.GetConnectStr().ConnectionString);
                cmd.CommandText = "insert `testplat`.`TESTPROJECT` (PM,PUBLISH_TIME,PRODUCT_LINE,NAME,PROGRESS,TEST_SUB_TIME,PROJECT_TYPE) "+
                                "values('" + _PM + "','" + _PUBLISH_TIME + "','" + _PRODUCT_LINE + "','" + _NAME + "'," + 100 + ",'" + _TEST_SUB_TIME + "'," + _PROJECT_TYPE + ")";
中文不再显示乱码,于是可以断言是存储过程的问题。为了验证,直接到Mysql客户端工具中
执行存储过程:
CALL apend_testproject('elbert', '2009-11-30', 0, '木牛流马',2, '2009-10-30', 2);
报:
Incorrect string value: '\xE6\x9C\xA8\xE7\x89\x9B...' for column '_NAME' at row 1                
至此可以断言MySql有b ug;虽然经过验证,但是毕竟不是mysql方面专家,所以标题加上疑似!
附mysql版本 
mysql  Ver 14.12 Distrib 5.0.81, for pc-linux-gnu (i686) using readline 5.1


本文转自elbertchen 51CTO博客,原文链接:http://blog.51cto.com/linkyou/283252,如需转载请自行联系原作者