乱码问题太变态了,5555~ 在html的<head></head>里加入<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />试试看。如果不行,那么把下面结果贴出来select ID,hex(VALUE) from mytable; 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 谢谢!<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插入果然是不同的内容 set names utf8 加了没有? 以前给别的地方写的乱码的分析,原理一样,供参考http://www.htkou.net/forum/index.php?id=13067 为什么那个Linux上的Apache会是这样编码的啊?发现另外一台Linux上相同配置的Apache也是存在这样的问题,Apache配置文件中设置编码到底要如何设置啊? 两台服务器连接不同的数据库?如果是这样。那么在mysql_connect()之后,加上mysql_query("set names utf8");如果php版本>= 5.2.3,用mysql_set_charset("utf8")。另外:强烈建议使用mysql_set_charset函数而不是set names语句,后者在某些字符集下会带来安全漏洞。 数据库是同一个数据库,页面代码也是完全相同的,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,'谢谢','谢谢'); 上面取的表是USERS表不是mytable了,不过本质没区别 两边都用phpmyadmin加入一条相同的数据看看结果 你到底试了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)。 谢谢!周末弄火车票去了没来跟帖,不好意思。我在mysql_connect()之后,加上mysql_query("set names utf8")这句已经可以以utf8编码正确存储中文了,但是为什么apache与mysql之间传递数据会编码错误,还是一直弄不明白。非常谢谢surfchen ,helloyou0 两位! php 将图片以二进制存入mysql数据库 新手求助 如何做一个会员关键字 查询 请教一个MYSQL的修改语句。。 如何将一段PHP程序写成函数,或类,方便重复调用 数组求和操作 关于PHP让目标网页跳转问题(不是该网页跳转!) url rewrite 规则在实际应用中遇到怪问题 请教 include (传参)的用法! 问一个字母自动转换的问题?? PHP 页面嵌入的php代码不执行问题 php从mysql中取出的中文乱码 关于discuz DISCUZ_ROOT定义,为什么把目录字符串减了7
查询结果:
+----+--------------------------+
| ID | hex(VALUE) |
+----+--------------------------+
| 1 | C3A4C2BDC2A0C3A5C2A5C2BD |
| 2 | E8B0A2E8B0A2 |
| 3 | E4BDA0E5A5BD |
| 4 | C3A8C2B0C2A2C3A8C2B0C2A2 |
+----+--------------------------+
ID:1,你好,Linux插入
ID:2,谢谢,Windows插入
ID:3,你好,Windows插入
ID:4,谢谢,Linux插入
果然是不同的内容
http://www.htkou.net/forum/index.php?id=13067
SQL则为:INSERT INTO `USERS` VALUES (1,'你好','你好');
INSERT INTO `USERS` VALUES (2,'??','??');
INSERT INTO `USERS` VALUES (3,'??','??');
INSERT INTO `USERS` VALUES (4,'谢谢','谢谢');
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)。