在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了