一开始跑偏了方向,以为是数据库里的编码问题。
在mysql中输入下列代码段,可以查看数据库中的所有字符编码情况。
SHOW VARIABLES LIKE 'character%';
结果如图:
可以看到大部分都是utf8,唯独character_set_server是latin1,于是误认为是这个编码出了问题,想把它也改成utf8
网上有大量教程,煞有其事的教你如何修改这个character_set_server字符编码,我试遍全网教程都没有修改成功,包括my.ini配置,执行"SET character_set_server = utf8"命令等等都没有用。
且不说到底如何更改这个character_set_server的编码,事实上乱码问题根本与这个无关。character_set_server只是代表数据库内部是采用latin1编码方式来保存的,不影响调取和写入。引用这篇博客中《关于MySQL中的8个 character_set 变量说明》给出的解释是,“这个变量建议由系统自己管理,不要人为定义”。
那么乱码的原因到底是什么呢,其实很简单,在php文件开头加入:
query("SET NAMES 'UTF8'");
<?php
$link = mysqli_connect('localhost','root','','happy');
if (!$link) {
die('Could not connect to MySQL: ' . mysql_error());
}
// 添加此行代码,解决中文乱码问题
$link->query("SET NAMES 'UTF8'");
$sql = "select * from subway limit 5";
$result = mysqli_query($link, $sql);
while($row = mysqli_fetch_array($result)){
echo $row['id'] . " : " .$row['code'] . " : " . $row['name'];
echo "<br>";
}
mysqli_close($link);
?>