PHP连接MySQL查询结果中文显示乱码解决方法


Posted in PHP onOctober 25, 2013

我们首先假设数据库中采用的编码为UTF-8
这时我们在PHP页面中应当首先添加

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

此处charset的值utf-8必须与文件保存时的编码类型一样

之后在数据库查询前添加

mysql_query("set names 'utf8'");

该行语句的编码值也应当与上面的编码值一样。

总而言之,网页保存的编码类型、网页的charset=utf-8、和执行的set names utf8语句的编码方式应当一致

下面引用一篇不错的分析

MySQL的“SET NAMES x”字符集问题分析

近来接受BBT的培训,做一个投票系统。系统代码倒不是很难,但是我的时间主要花费在了研究字符集和编码上面。MySQL和Apache两个系统的编码(字符集)问题让我费劲脑筋,吃尽苦头。网上对这些问题的解决比较零散,比较片面,大部分是提供解决方法,却不说为什么。于是我将这几天收获总结一下,避免后来者再走弯路。这篇文章对PHP编写有一点帮助(看完你就知道,怎样让你的PHP程序在大部分空间提供商的服务器里显示正常),但是更多帮助在于网络服务器的架设和设置。

先说MySQL的字符集问题。Windows下可通过修改my.ini内的

1.# CLIENT SECTION
2.[mysql]
3.default-character-set=utf8
4.# SERVER SECTION
5.[mysqld]
6.default-character-set=utf8

这两个字段来更改数据库的默认字符集。第一个是客户端默认的字符集,第二个是服务器端默认的字符集。假设我们把两个都设为utf8,然后在MySQL Command Line Client里面输入“show variebles like “character_set_%”;”,可看到如下字符:

character_set_client latin1
character_set_connection latin1
character_set_database utf8
character_set_results latin1
character_set_server utf8
character_set_system utf8

其中的utf8随着我们上面的设置而改动。此时,要是我们通过采用UTF-8的PHP程序从数据库里读取数据,很有可能是一串“?????” 或者是其他乱码。网上查了半天,解决办法倒是简单,在连接数据库之后,读取数据之前,先执行一项查询“SET NAMES UTF8”,即在PHP里为

1.mysql_query("SET NAMES UTF8");

即可显示正常(只要数据库里信息的字符正常)。为什么会这样?这句查询“SET NAMES UTF8”到底是什么作用?

到MySQL命令行输入“SET NAMES UTF8;”,然后执行“show variebles like “character_set_%”;”,发现原来为latin1的那些变量“character_set_client”、“character_set_connection”、“character_set_results”的值全部变为utf8了,原来是这3个变量在捣蛋。查阅手册,上面那句等于:

1.SET character_set_client = utf8;
2.SET character_set_results = utf8;
3.SET character_set_connection = utf8;

看看这3个变量的作用:

信息输入路径:client→connection→server;
信息输出路径:server→connection→results。

换句话说,每个路径要经过3次改变字符集编码。以出现乱码的输出为例,server里utf8的数据,传入connection转为latin1,传入results转为latin1,utf-8页面又把results转过来。如果两种字符集不兼容,比如latin1和utf8,转化过程就为不可逆的,破坏性的。所以就转不回来了。

但这里要声明一点,“SET NAMES UTF8”作用只是临时的,MySQL重启后就恢复默认了。

接下来就说到MySQL在服务器上的配置问题了。岂不是我们每次对数据库读写都得加上“SET NAMES UTF8”,以保证数据传输的编码一致?能不能通过配置MySQL来达到那三个变量默认就为我们要想的字符集?手册上没说,我在网上也没找到答案。所以,从服务器配置的角度而言,是没办法省略掉那行代码的。

总结:为了让你的网页能在更多的服务器上正常地显示,还是加上“SET NAMES UTF8”吧,即使你现在没有加上这句也能正常访问。

PHP 相关文章推荐
php下使用SMTP发邮件的代码
Jan 10 PHP
discuz Passport 通行证 整合笔记
Jun 30 PHP
PHP基础学习之流程控制的实现分析
Apr 28 PHP
深入php define()函数以及defined()函数的用法详解
Jun 05 PHP
php检测网页是否被百度收录的函数代码
Oct 09 PHP
yii2中的rules 自定义验证规则详解
Apr 19 PHP
PHP-CGI远程代码执行漏洞分析与防范
May 07 PHP
PHP处理bmp格式图片的方法分析
Jul 04 PHP
PHP封装的mysqli数据库操作类示例
Feb 16 PHP
PHP常用工具函数小结【移除XSS攻击、UTF8与GBK编码转换等】
Apr 27 PHP
ThinkPHP5与单元测试PHPUnit使用详解
Feb 23 PHP
PHP 对象继承原理与简单用法示例
Apr 21 PHP
学习php过程中的一些注意点的总结
Oct 25 #PHP
php模拟ping命令(php exec函数的使用方法)
Oct 25 #PHP
php导入导出excel实例
Oct 25 #PHP
PHP error_log()将错误信息写入一个文件(定义和用法)
Oct 25 #PHP
php获取目录所有文件并将结果保存到数组(实例)
Oct 25 #PHP
php中并发读写文件冲突的解决方案
Oct 25 #PHP
ajax返回值中有回车换行、空格的解决方法分享
Oct 24 #PHP
You might like
mayfish 数据入库验证代码
2010/04/30 PHP
php+highchats生成动态统计图
2014/05/21 PHP
PHP图片处理之使用imagecopy函数添加图片水印实例
2014/11/19 PHP
php通过array_shift()函数移除数组第一个元素的方法
2015/03/18 PHP
关于扩展 Laravel 默认 Session 中间件导致的 Session 写入失效问题分析
2016/01/08 PHP
DEDE实现转跳属性文档在模板上调用出转跳地址
2016/11/04 PHP
php+mysql实现简单登录注册修改密码网页
2016/11/30 PHP
PHP开发中csrf攻击的简单演示和防范
2017/05/07 PHP
Laravel 微信小程序后端搭建步骤详解
2019/11/26 PHP
为你的 Laravel 验证器加上多验证场景的实现
2020/04/07 PHP
TP框架实现上传一张图片和批量上传图片的方法分析
2020/04/23 PHP
做网页的一些技巧(续)
2007/02/01 Javascript
兼容多浏览器的字幕特效Marquee的通用js类
2008/07/20 Javascript
javascript URL锚点取值方法
2009/02/25 Javascript
JavaScript继承方式实例
2010/10/29 Javascript
innerHTML与jquery里的html()区别介绍
2012/10/12 Javascript
jQuery创建平滑的页面滚动(顶部或底部)
2013/02/26 Javascript
jquery插件开发之实现google+圈子选择功能
2014/03/10 Javascript
json的定义、标准格式及json字符串检验
2014/05/11 Javascript
js组件SlotMachine实现图片切换效果制作抽奖系统
2016/04/17 Javascript
webpack4.0 入门实践教程
2018/10/08 Javascript
JS基于Location实现访问Url、重定向及刷新页面的方法分析
2018/12/03 Javascript
使用pyecharts无法import Bar的解决方案
2020/04/23 Python
python中requests使用代理proxies方法介绍
2017/10/25 Python
[原创]教女朋友学Python3(二)简单的输入输出及内置函数查看
2017/11/30 Python
python3实现的zip格式压缩文件夹操作示例
2019/08/17 Python
Django单元测试中Fixtures用法详解
2020/02/25 Python
python+adb+monkey实现Rom稳定性测试详解
2020/04/23 Python
使用AJAX和Django获取数据的方法实例
2020/10/25 Python
Spy++的使用方法及下载教程
2021/01/29 Python
加拿大时装零售商:Influence U
2018/12/22 全球购物
BISSELL官网:北美吸尘器第一品牌
2019/03/14 全球购物
ManoMano英国:欧洲第一家专注于DIY和园艺市场的电商平台
2020/03/12 全球购物
优秀毕业生求职推荐信范文
2013/11/21 职场文书
会计电算化个人求职信范文
2014/01/24 职场文书
四风个人对照检查材料思想汇报
2014/09/25 职场文书