首页 > 网站开发 > php写数据库phpmyadmin出现乱码 和 php读数据库, 客户端出现乱码

php写数据库phpmyadmin出现乱码 和 php读数据库, 客户端出现乱码

最后更新: 2015-06-25    浏览次数:     

问题一: 用php向数据库写数据时, 如果数据包含中文或者特殊字符, 通过phpmyadmin查看数据, 发现写入的数据是乱码.

解决问题关键:
1: 确保所有页面都使用UTF8编码输出(通过header/<meta>, 如: <meta http-equiv=”Content-Type” content=”text/html; charset=utf-8″ />).
确保所有文件(php)都是使用UTF8编码, 无签名(无BOM)编码格式保存.

php写数据库phpmyadmin出现乱码 和 php读数据库, 客户端出现乱码 - diê-biāng - 1

utf-8无bom格式编码

2: 确保数据表中, 表本身的编码和字段编码, 均为UTF8.
3: 最重要, 最容易忽略的关键问题就是: php在连接数据库时, 要进行编码申明
 

<?php
mysql_query("SET NAMES 'utf8'");    //编码申明: 通知服务器客户端传递过去的语句的编码
?>

例子:
<?php
$con = mysql_connect("localhost","peter","abc123");
if (!$con)
{
    die('Could not connect: ' . mysql_error());
}
 
mysql_select_db("my_db", $con);     
 
mysql_query("SET NAMES 'utf8'");    //编码申明: 通知服务器客户端传递过去的语句的编码
 
mysql_query("INSERT INTO Persons (FirstName, LastName, Age)
VALUES ('Peter', 'Griffin', '35')");
 
mysql_query("INSERT INTO Persons (FirstName, LastName, Age)
VALUES ('Glenn', 'Quagmire', '33')");
 
mysql_close($con);
?>

问题二: 用php向数据库读取数据时, 数据在页面上也显示为乱码( 通过phpmyadmin查看数据, 数据是无乱码的).
解决问题关键:
1: 确保所有页面都使用UTF8编码输出(通过header/<meta>, 如: <meta http-equiv=”Content-Type” content=”text/html; charset=utf-8″ />).
确保所有文件(php)都是使用UTF8编码, 无签名(无BOM)编码格式保存.
2: 确保数据表中, 表本身的编码和字段编码, 均为UTF8.
3: 最重要, 最容易忽略的关键问题就是: php在查询数据库前, 也要进行编码申明
<?php
mysql_query("SET NAMES 'utf8'");                //编码申明: 通知服务器客户端传递过去的语句的编码
mysql_query("SET CHARACTER_SET_CLIENT=utf8");   //服务器设置客户端编码
mysql_query("SET CHARACTER_SET_RESULTS=utf8");  //设置查询结果的编码
?>

例如:
<?php
$con = mysql_connect("localhost","peter","abc123");
if (!$con)
{
    die('Could not connect: ' . mysql_error());
}
 
mysql_select_db("my_db", $con);
 
mysql_query("SET NAMES 'utf8'");                //编码申明: 通知服务器客户端传递过去的语句的编码
mysql_query("SET CHARACTER_SET_CLIENT=utf8");   //服务器设置客户端编码
mysql_query("SET CHARACTER_SET_RESULTS=utf8");  //设置查询结果的编码
 
$result = mysql_query("SELECT * FROM Persons");
 
while($row = mysql_fetch_array($result))
{
    echo $row['FirstName'] . " " . $row['LastName'];
    echo "<br />";
}
 
mysql_close($con);
?>