环境:mysql 5 + iis + asp.net
字符集:utf 8
问题:通过web页面插入、修改记录后,所有汉字全变成"?",不管是用存储过程,还是sql语句插入、修改,结果都是一样。直接通过管理器(Navicat 8),插入、修改记录是没有问题的,从数据库读出汉字显示在页面,也没有问题。曾一度猜测是iis字符集的问题,分别使用了gb2312和gbk、utf,均不能解决问题。也怀疑程序在中间过程出现乱码,直接使用sql语句 “update tabName set field1='汉字'”依然失败blob字段,图片读写,都搞定了,就这东西搞我2天,还没成

解决方案 »

  1.   

    http://topic.csdn.net/u/20071124/08/3b7eae69-ed1d-4a77-8895-9930bf3601af.html
      

  2.   

    有认真看了精华贴,一个个的试了。
    个人认为是iis与mysql建立连接的时候,字符集就变成了乱码了
    如果设置连接的字符集,却找不到地方
    有人说 set names 'utf8'可以解决,可我用的是存储过程啊,怎么加的上呢
    在存储过程里面加没有用,因为到存储过程里的时候,链接已经建立好了
      

  3.   

    如果只是为了避免问题的话,建议楼主废弃原来的数据库,重新创建一个数据库,当然创建的时候要指定合适的编码方式。
    等等……上面的话,好像是没看清楼主的问题后说的,重新看了一下,这么说吧:
    看样子楼主的数据库应该是没有问题的,你说通过Navicat操作,以及取数据显示在页面都没有问题?那么可能是插入数据的时候处理不当?楼主不会是用的直接拼接字符串的方式生成SQL语句的吧?建议用别的方式插入数据。ASP.net我不了解,比如在JAVA的jdbc及Hibernate中可以用带参数(用问号?标示参数)的语句然后另外设置参数值,这样能够解决一些乱码问题。
      

  4.   

    仔细看了精华帖子不可能解决不了问题。
    贴出你的show variables like '%character%';
    的结果
      

  5.   

    谢谢各位的热心了,解决了
    在my.ini里加上default-character-set=utf8 即可
    但是,依旧有疑问,尽管我的程序跑起来很正常了在my.ini里手动加上这句话,然后在windows服务控制台重启了mysql服务,重启了iis后还是不行用mysql 5的实例配置向导设置默认字符集后,却可以了。我检查过my.ini文件,差别就是default-character-set=utf8 这句话。或许my.ini有其他变化,我没看见吧,但我脑中已经存在疑问了。有人能帮我解答,自然高兴,没人告诉也高兴,因为我已经能存入中文了。
      

  6.   

    IIS 的乱码和其他的乱码解决方案是一样的。我们目前的项目也是用IIS做WEB 服务器的。MYSQL 做的后端数据库。上个礼拜他们就是碰到了乱码问题。是我给解决的 。关于办法在精华帖子里有的。如果还是不能解决的话,发EMAIL给我。我给你解答。
      

  7.   

    存储过程也可以加 set   names   'utf8' 啊  就当一个sql语句执行就可以啦
      

  8.   

    进行数据存取时先执行
    set names 'utf-8';在网面<title>下再加一行
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">