关于在MySQL和PHP中同时使用utf8(windows 和 CentOS环境下配置不同)

在MySQL中设置字符集为utf8后,在终端用mysql的命令进行插入和查询,均能正确显示汉字(如果默认字符集为latin,插入汉字会显示为??)

但是通过php从数据库中读取时,显示为问号,而不是汉字,(此时已经在php页面的head中设置了<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>)

另外测试了,在php中使用insert into语句在数据库中插入汉字,这个从php页面插入的汉字,可以在php页面上正常用select语句读取,显示为汉字,但是在终端中用mysql语句查询这条记录,显示为乱码。

后来发现,在php页面调用数据库之前,需要先使用如下三条sql语句

//连接数据库之后,执行查询或插入更新之前
$db->query("set names 'utf8'");
$db->query("set character_set_client=utf8");
$db->query("set character_set_results=utf8");

//然后再执行sql操作

之后进行的查询和插入,修改等操作,均可在php页面和终端命令行中都正常显示为汉字。。

之前在网上看到有人说set names 'utf8';相当于

set character_set_client=utf8
set character_set_results=utf8
set character_set_connect=utf8


相当于把这三个都执行了,但是我实践的结果是,只使用set names 'utf8'并不能满足需要。。client和result还是要设置。。

另外windows的cmd中和CentOS的终端中,对字符集的设置有点区别

show variables like 'character%';

查看系统的字符集设置

windows cmd 中 set character_set_client = gbk;

依次设置后,如上图所示。(如果设置为utf8,则命令行中查询会显示乱码)

CentOS下 set character_set_client = utf8;

依次设置后,就ok了

原文地址:https://www.cnblogs.com/cybersword/p/2788417.html