日期:2014-05-17  浏览次数:20657 次

PHP查询mysql,中文数据,通过不同方式添加的相同数据竟然显示不同
hi,
我先说下我的情况。php的新手。
----现象
输出的页面中,我已经添加了<meta charset="UTF-8">,我也在查询mysql的时候,添加了
mysql_query("set character set utf8");
 mysql_query("SET NAMES 'UTF8'");
有的中文可以显示,有的不能。

----乱码显示的过程和代码
我的phpmyadmin中数据库和text字段,都是用 utf8_unicode_ci进行设置。

我手动通过phpmyadmin在数据库添加的中文,然后直接执行
 mysql_query("set character set utf8");
 mysql_query("SET NAMES 'UTF8'");
$rs = $db->query("SELECT * FROM book");
显示出乱码。

----正常显示的代码和意外的结果
 mysql_query("set character set utf8");
 mysql_query("SET NAMES 'UTF8'");
$rs2 =$db->exec("INSERT INTO `lalabook`.`book` (`bookname`, `bookdes`) VALUES ('小兵', '兵小')");
$rs = $db->query("SELECT * FROM book");
可以正常的显示出我插入的数据。但是有个问题是,我在通过phpmyadmin查看我插入的数据时,显示的时乱码。
----
所以我不清楚这个时什么原因造成的,是不是我以后插入数据都要通过代码。不能再用phpmyadmin插入了


------解决方案--------------------
在phpmyadmin 内直接执行 SET NAMES 'UTF8' 然后再SELECT ....出来的结果呢?
phpmyadmin也是需要设置链接编码的.
------解决方案--------------------
是不是文件本身的编码有问题
------解决方案--------------------
是虚拟主机吧, 一切都是正常的.

用户提交Utf8,php操作入库,出库就可以了。

phpadmin乱码是因为mysql_server编码一般服务商都是latin的,但服务商一般都保证connenct/client/result是utf8的,也就是数据出入的编码是utf8,存储的时候是latin,所以去phpadmin看php操作的会乱码。

另外,在phpadmin里执行sql插入的数据,在php读取的时候会乱码,这个问题是很神奇的,我也没看phpmyadmin页面是什么编码。

一句话:设置库,表,列的编码全部是utf8-unicode-ci,之后数据的出入库都采用utf8编码,不要在意phpadmin查数据时候乱码,不会影响用户即可。
------解决方案--------------------
编码常用的是utf8-general-ci
不只是表要通一,要统一的总共有四处
一是:数据库类型,其中包括,数据库,表,字段三处都要统一,可以检查一下
二是:文件的编码类型,你若用dw或editplus可以查看页面编码,不同需修改
三是:访问数据库时的设置既set NAMES utf8;
四是:浏览器显示方式,既<meta charset=utf-8>
这四处必需统一,否则可能会出现问题