解决 PHP/MySQL 数据库读取中文显示乱码或问号

0

要搞定 PHP+mySQL 常见的中文乱码或问号显示的问题,最高原则就是–从头到尾都使用UTF8编码。

四个编码设定

我自己的经验就是确认下述四个地方的编码设定都是UTF8:

  1. MySQL数据表:用phpmyadmin建立数据表时,注意选择utf8_unicode_ci的编码 (通常在最下面)
  2. 在PHP内写数据库存取语法时,在mysql_select_db之前,加上 mysql_query(“SET NAMES ‘UTF8′”);
  3. 显示读出数据库结果的网页,也要确认是否有加上
  4. 用编辑器开启网页编辑的编码,若不是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′”);,数据库内的中文资料在网页显示应该还是会正常。

发表评论

您的邮箱不会公开,当您的评论有新的回复时,会通过您填写的邮箱向您发送评论内容。 必填字段 *

为何看不到我发布的评论?

正在提交, 请稍候...