要搞定 PHP+mySQL 常见的中文乱码或问号显示的问题,最高原则就是–从头到尾都使用UTF8编码。
四个编码设定
我自己的经验就是确认下述四个地方的编码设定都是UTF8:
- MySQL数据表:用phpmyadmin建立数据表时,注意选择utf8_unicode_ci的编码 (通常在最下面)
- 在PHP内写数据库存取语法时,在mysql_select_db之前,加上 mysql_query(“SET NAMES ‘UTF8′”);
- 显示读出数据库结果的网页,也要确认是否有加上
- 用编辑器开启网页编辑的编码,若不是UTF8,会造成网页内静态中文字乱码,因此请转换为UTF8
从结果来看问题原因
Q. 从数据库读出的中文出现问号?
如果你进phpmyadmin看数据表内的中文显示正常,可能是1,3,4你都做了,但2没做。
Q. 从数据库读出的中文及静态文字都是乱码?
如果你进phpmyadmin看数据表内的中文显示正常,可能是1,2,4你都做了,但3没做。
Q. 从数据库读出的中文出现乱码?网页静态文字是正常?
如果你进phpmyadmin看数据表内的中文也是乱码,那应该是你1没做,有做2;若你不想做1,就别做2。
如果你进phpmyadmin看数据表内的中文显示正常,那应该是你3,4没做。
Q. 从数据库读出的中文正常了,但网页静态文字是乱码?
可能是4没做到。
MySQL 数据表是乱码,怎么办?
用phpmyadmin查看mySQL数据库内的中文显示乱码 (数据表编码可能是预设的latin1_swedish_ci,总之是非utf8语系),通常这种情况,是网页前台本身没编好UTF8,就把中文资料以乱码的方式存入数据表。
这时建议你最好将数据表重建成utf8_unicode编码,不然日后要用phpmyadmin看数据库会很痛苦。如果你不打算重建,那在作mysql_select_db之前,就不要加上 mysql_query(“SET NAMES ‘UTF8′”);,数据库内的中文资料在网页显示应该还是会正常。