在html的<head></head>里加入<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />试试看。如果不行,那么把下面结果贴出来
select ID,hex(VALUE) from mytable;

解决方案 »

  1.   

    谢谢!<head></head>里面<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />之前有加了,
    查询结果:
    +----+--------------------------+
    | ID |        hex(VALUE)        |
    +----+--------------------------+
    |  1 | C3A4C2BDC2A0C3A5C2A5C2BD |
    |  2 | E8B0A2E8B0A2             |
    |  3 | E4BDA0E5A5BD             |
    |  4 | C3A8C2B0C2A2C3A8C2B0C2A2 |
    +----+--------------------------+
    ID:1,你好,Linux插入
    ID:2,谢谢,Windows插入
    ID:3,你好,Windows插入
    ID:4,谢谢,Linux插入
    果然是不同的内容
      

  2.   

    set names utf8 加了没有?
      

  3.   

    以前给别的地方写的乱码的分析,原理一样,供参考
    http://www.htkou.net/forum/index.php?id=13067
      

  4.   

    为什么那个Linux上的Apache会是这样编码的啊?发现另外一台Linux上相同配置的Apache也是存在这样的问题,Apache配置文件中设置编码到底要如何设置啊?
      

  5.   

    两台服务器连接不同的数据库?如果是这样。那么在mysql_connect()之后,加上mysql_query("set names utf8");如果php版本>= 5.2.3,用mysql_set_charset("utf8")。另外:强烈建议使用mysql_set_charset函数而不是set names语句,后者在某些字符集下会带来安全漏洞。
      

  6.   

    数据库是同一个数据库,页面代码也是完全相同的,mysql中数据库、表的默认编码都是utf-8,两个Apache 的默认编码设置也是utf-8。既然我从windows上的php、jsp、java等途径对这个表进行存/取操作都没有任何乱码问题,说明问题只可能是出现在Linux那个Apache上,甚至于我在那个Linux上直接运行java文件操作,结果也都是乱码。mysql应该是没有问题的。我将这个表的数据mysqldump导出到txt文件中,可以看到其中包含了/*!40101 SET NAMES utf8 */; SQL是:INSERT INTO `USERS` VALUES (1,'你好','你好'),(2,'谢谢','谢谢'),(3,'你好','你好'),(4,'谢谢','谢谢');而如果在mysqldump导出时指定 --default-character-set=latin1,txt文件中则包含/*!40101 SET NAMES latin1 */; 
    SQL则为:INSERT INTO `USERS` VALUES (1,'你好','你好');
    INSERT INTO `USERS` VALUES (2,'??','??');
    INSERT INTO `USERS` VALUES (3,'??','??');
    INSERT INTO `USERS` VALUES (4,'谢谢','谢谢');
      

  7.   

    上面取的表是USERS表不是mytable了,不过本质没区别
      

  8.   

    两边都用phpmyadmin加入一条相同的数据看看结果
      

  9.   

    你到底试了mysql_query("set names utf8");没?你那两个错误的VALUE,按照两个hex一个byte,也就是12个bytes。很明显,结果是这样产生的,我用代码描述“谢谢”出错的过程,如下:shell> php -r 'echo pack("H12","E8B0A2E8B0A2");'|iconv -f latin1  -t utf-8|hexdump结果如下:
    0000000 c3 a8 c2 b0 c2 a2 c3 a8 c2 b0 c2 a2            
    000000c我解释一下上面的代码:
    php -r 'echo pack("H12","E8B0A2E8B0A2");'//输出的是utf-8的谢谢,我之所以用php的pack来输出,是为了防止你的终端编码和我不一直,又要问一堆东西了。其实这里完全可以用echo -n '谢谢'替代
    iconv -f latin1 -t utf-8//把utf-8的“谢谢”认为是latin1编码,于是做了一次latin1到utf-8的处理,实际上是utf-8在做了一次utf-8的编码
    hexdump//输出hex结果而从web角度上看,你的html确实是utf-8,提交的数据也是utf-8。但是mysql client charset却被错误的识别为latin1,于是这里做了一个错误的转换(client->connection,也可能是connection->storage)。
      

  10.   

    谢谢!周末弄火车票去了没来跟帖,不好意思。我在mysql_connect()之后,加上mysql_query("set names utf8")这句已经可以以utf8编码正确存储中文了,但是为什么apache与mysql之间传递数据会编码错误,还是一直弄不明白。非常谢谢surfchen ,helloyou0 两位!