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)编码格式保存.
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); ?> |