问题描述:
我用PHP+MYSQL进行开发,
之前一直问题,今天写到一个PHP的JS+Ajax更新字段时出现问题。
[Err] 1366 - Incorrect string value: '\xD6\xD0\xB9\xFA' for column 'GeXing' at row 1从网上查了一大堆,结果没一个可用的,
网上都说的是插入的时候编码问题,但现在我的问题是直接输出SQL语句,复制到Navicate里执行时却没有问题,
但在PHP程序里执行时却报上面的错,
我也曾试着用存储过程,但在执行存储过程时仍报错,不清楚怎么搞的。

解决方案 »

  1.   

    http://blog.csdn.net/ACMAIN_CHM/archive/2009/05/12/4174186.aspx
    MySQL 中文显示乱码
      

  2.   

    参考上贴中的PHP中加上set name
      

  3.   

    有一个简单的方法, 楼主可以试试。建表时, 使用如下格式:
    CREATE TABLE `t_msghis` (
      `Serial` varchar(255) NOT NULL,
      `Type` int(11) DEFAULT NULL,
      `Title` varchar(255) DEFAULT NULL,
      `Context` varchar(255) DEFAULT NULL,
      `OperTime` varchar(255) DEFAULT NULL
    ) ENGINE=InnoDB DEFAULT CHARSET=gb2312;插入一条数据:
    insert into t_msghis values('中文码1’, 1, '中文码2‘, '中文码3', '中文码4’) 操作端每次进行操作时, 执行一下 set names gb2312; 命令就行了。 
    下面是C#的代码,其实原理应该是一致的。取得表数据:
                MySQLConnection conn;
                conn = new MySQLConnection(connectionstring);
                conn.Open();            MySQLCommand commn = new MySQLCommand("set names gb2312", conn);
                  commn.ExecuteNonQuery();            string sql = "select * from t_msghis";
                MySQLDataAdapter mda = new MySQLDataAdapter(sql, conn);            mda.Fill(table);
                conn.Close();
                return table;
    更改表数据:
            public int ExecuteCmd(string str)
            {
                MySQLConnection conn;
                conn = new MySQLConnection(connectionstring);
                conn.Open();            MySQLCommand commn = new MySQLCommand("set names gb2312", conn);
                commn.ExecuteNonQuery();            commn = new MySQLCommand(string.Format("update t_msghis set context='{0}'", str), conn);            int icmd = commn.ExecuteNonQuery();
                return icmd;
            }
      

  4.   

    谢谢大家,自己解决了,使用iconv("utf-8","gb2312//ignore",$cont)就可以了.哈哈.
      

  5.   

    要解决中文乱码,my.ini里可以设置默认编码GBK或是其它,
    然后在网页中使用相同的编码,这样就不会出现乱码,这样较iconv简单,但需要对服务器进行配置。