首页 > web > PHP从Mysql读取中文显示乱码问题

PHP从Mysql读取中文显示乱码问题

Jul 8th,2009 发表评论

今天做树形菜单时从数据库中读取中文数据一直显示????,害我在网上找了半天答案,终于搞定,抓下来做个存档。
从MySQL 4.1开始引入的多语言支持确实很棒,而且一些特性已经超过了其他的数据库系统。不过在测试过程中发现使用适用于MySQL 4.1之前的PHP语句操作MySQL数据库会造成乱码,即使是设置过了表字符集也是如此。
MySQL 4.1的字符集支持(Character Set Support)有两个方面:字符集(Character set)和排序方式(Collation)。对于字符集的支持细化到四个层次: 服务器(server),数据库(database),数据表(table)和连接(connection)。

当我们按照原来的方式通过PHP存取MySQL数据库时,就算设置了表的默认字符集为utf8并且通过UTF-8编码发送查询,你会发现存入数据库的仍然是乱码。
其实简单的方法是通过phpMyAdmin来设置。
设置下面几项:

1: 语言设置为 chinese (zh-utf-8)

2: MySQL 字符集: UTF-8 Unicode (utf8)
3: MySQL 连接校对: utf8_general_ci
4: 新增数据库和数据表的时候,整理项选择 utf8_general_ci

通过以上设置,在phpMyAdmin中操作和查询的时候,中文字符都不会乱码了。
但是你会发现,在php程序中用以前的sql语句查询出来的结果还是乱码,问题就出在connection连接层上。

解决方法是在成功连接数据库之后,发送一句查询语句:
1: $this->LinkID = mysql_connect($this->Host, $this->User, $this->Password);
2: mysql_query(‘SET NAMES ‘utf8”, $this->LinkID);
或:
DEFINE (‘LINK’, mysql_connect (DB_HOST, DB_USER, DB_PASSWORD));
mysql_query(“SET NAMES ‘utf8′”, LINK);

gbk编码的
$mysql_mylink = mysql_connect($mysql_host, $mysql_user, $mysql_pass);
mysql_query(“SET NAMES ‘GBK'”);

声明: 本文采用 BY-NC-SA 协议进行授权. 转载请注明转自: PHP从Mysql读取中文显示乱码问题
  1. 本文目前尚无任何评论.
  1. 本文目前尚无任何 trackbacks 和 pingbacks.