php插入mysql数据库出现中文乱码问题的解决

昨天在给别人讲知识的时候翻车了,尴尬的是车翻了没有及时的扶起来,所幸最终找到了问题所在,情况是这样的:
 
在数据库test的user表中插入一条数据:


 $link = mysqli_connect('localhost','root','','test');
if(mysqli_connect_errno($link)){
    die("<h2 style='color:red;'>连接失败</h2>".mysqli_connect_error($link));
}else{
    echo '<h2>连接成功</h2>';
}
$sql = "INSERT INTO `user` (`us_name`,`us_password`) VALUES ('张三','zhangsan')";
if(mysqli_query($link,$sql)){
    echo '成功的添加了'.mysqli_affected_rows($link).'条记录,新增主键id'.mysqli_insert_id($link);
}else{
    echo '添加失败'.mysqli_error($link);}
mysqli_close($link);


 
能够插入成功,但是出现乱码情况,如图
1528251785(1).png

然后在代码中添加
//规定html页面字符集
header('Content-type:text/html;charset=utf-8');和
//规定客户端字符集
mysqli_set_charset($link,'utf-8');
并没有解决问题,插入的中文依旧是乱码,这两行代码一个是规定HTML页面编码,一个是规定PHP编码,由此可以知道,一定是mysql服务端的编码出现问题,我们运行以下命令:
mysql>show variables like 'char%'
微信图片编辑_20180606104230.jpg

可以看到character_set_server并不是utf8,我们可以在my.ini中更改,找到[mysqld]在下面加入
character_set_server = utf8(注意:在mysql版本5.5以下可以设置default-character-set = utf8 ,而高于5.5的版本已经废除了default-character-set,会出现wamp启动不成功的错误),然后关闭wamp,再开启,不能重启
我们再运行以下命令,会发现character_set_server已经改成了utf8
mysql>show variables like 'char%'
微信图片_20180606115600.png

我们再运行插入语句,即可发现,插入成功而且不会乱码
123.png

0 个评论

要回复文章请先登录注册