Home >Backend Development >PHP Tutorial >MySQL中utf8_unicode_ci乱码的问题

MySQL中utf8_unicode_ci乱码的问题

WBOY
WBOYOriginal
2016-06-06 20:51:32990browse

存进去的全是问号,类似下面这样。
MySQL中utf8_unicode_ci乱码的问题

当时因为页面显示正常(全部使用utf8编码,语言是php,查询之前也有加编码设置),就没太在意!

这次更好服务器后,页面的输出就全部是问号了,不明白原因,求指教!

试过的方法有:
在查询之前设置
mysql_query("set names 'utf8'");
mysql_query("set character_set_client=utf8");
mysql_query("set character_set_results=utf8");

回复内容:

存进去的全是问号,类似下面这样。
MySQL中utf8_unicode_ci乱码的问题

当时因为页面显示正常(全部使用utf8编码,语言是php,查询之前也有加编码设置),就没太在意!

这次更好服务器后,页面的输出就全部是问号了,不明白原因,求指教!

试过的方法有:
在查询之前设置
mysql_query("set names 'utf8'");
mysql_query("set character_set_client=utf8");
mysql_query("set character_set_results=utf8");

你可以使用phpmyadmin看看是不是存进去的真的是乱码。
服务器编码,客户端编码,传输过程中编码保持一致。
有时候在命令行连接mysql,中文会乱码,原因是命令行对utf8不支持

补充:如果有phpmyadmin中看到是乱码,就是你程序和数据库设置的问题了:
修改php.ini

[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
[mysqld]
default-character-set=utf8

命令行连接mysql乱码

SET NAMES GB2312

从你描述的情况来看很可能是新服务器上数据库字符集设置问题。

mysql_query("set names 'utf8'")等同于:
set character_set_client=utf8;
set character_set_results=utf8;
set character_set_connection=utf8;
但是mysql在内部执行操作前会将连接字符集转换为内部操作字符集,顺序如下:
1.使用每个数据字段的CHARACTER SET设定值;
2.若上述值不存在,则使用对应数据表的DEFAULT CHARACTER SET设定值(MySQL扩展,非SQL标准);
3.若上述值不存在,则使用对应数据库的DEFAULT CHARACTER SET设定值;(character_set_database)
4.若上述值不存在,则使用character_set_server设定值。

所以你可以将database和server字符集设置为utf8试一下,
参考文章:http://www.laruence.com/2008/01/05/12...

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn