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

我们首先假设数据库中采用的编码为UTF-8

这时我们在PHP页面中应当首先添加

此处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”吧,即使你现在没有加上这句也能正常访问。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/554361.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

怎样将腾讯视频下载到的电影传入手机_腾讯视频怎么缓存视频

不管这个腾讯视频好用与否,都有一大批用户,本文播放器家园网小编分享怎样将腾讯视频下载到的电影传入手机_腾讯视频怎么缓存视频。腾讯视频拥有独立的播放界面,软件采用独立的播放界面进行播放,用户点击喜欢的影视播放之后不会干扰…

腾讯视频主演角色弹幕怎么发

本文播放器家园网小编给大家分享“腾讯视频主演角色弹幕怎么发”。只需要打开腾讯视频,就可以在线享受腾讯视频网站内全部免费高清正版视频、最新影视大片、最独家的综艺、旅游、纪录片,在众多的播放器当中,腾讯视频堪称完美。腾讯视频可以在…

mysql 重装之后_mysql重装之后 复制data

(哇,编程小白的第一篇博客丫,激动)Q one:mysql需要重装,数据该怎么办。方法一:数据表最好是导出成.sql文件,这样才比较安全。方法二:直接copy了data文件:在mysql安装盘下的programda…

360极速浏览器兼容模式怎么设置在哪

360极速浏览器兼容模式怎么设置在哪,360浏览器怎么设置兼容模式?大部分浏览器都有两种视图模式:极速模式、兼容模式,这一点360浏览器也不例外,在加载速度上,极速模式快于兼容模式,要在360浏览器中切换极速…

log4j2 mysql_spring boot使用log4j2将日志写入mysql数据库

log4j2官方例子在spring boot中报错而且还是用的是org.apache.commons.dbcp包我给改了一下使用org.apache.commons.dbcp2包1.log4j2.xml如下:method"getDatabaseConnection" />includeLocation"true">AsyncLogger 表示是异步插入.需要在pom.xml中插入…

如何重置IE浏览器?重置IE浏览器的方法

ie浏览器是一款自带的浏览器服务软件,这款软件使用非常的方便,界面使用非常的简洁,浏览器的功能更加的全面,用户可以使用手机快速搜索,那么如何进行IE浏览器的重置呢?如果用户需要使用IE浏览器,想对IE浏览…

Win10系统怎么锁定IE浏览器主页

核心提示:Win10系统怎么锁定IE浏览器主页?一起看看吧! 目前,不少电脑用户都升级了win10系统,不过,关于win10系统的一些使用方法却不是很了解,比如说:当win10系统的IE浏览器被流氓软件窜改的主页网址该怎么…

vs2010 mysql linq to sql 系列_LINQ to SQL 系列 如何使用LINQ to SQL插入、修改、删除数据...

LINQ和 LINQ to SQL 都已经不是一个新事物了,但是我接触的比较晚,本着绝知此事要躬行的态度,决定写这个系列。本文使用的测试环境是VS 2010,和sql server 2005数据库。第一篇 从CUD开始,如何使用LINQ to SQL插入…

如何在IE浏览器中使用和管理RSS订阅源

核心提示:什么是RSS?简单来说,RSS就像微博一样。在你的源有更新的时候把更新推送给你,或者说在网站有更新的时候告诉你更新的内容。而源就好比是那些微博账号。 什么是RSS?简单来说,RSS就像微博一样。在你的源有更新的时候把更…

redis session 超时时间_Shiro性能优化:解决Session频繁读写问题

点击上方蓝色字体,选择“标星公众号”优质文章,第一时间送达作者 | 张永恒来源 | urlify.cn/YjEZNj背景Shiro 提供了强大的 Session 管理功能,基于 Shiro 实现 Session 共享非常方便,只需要定制一个我们自己的SessionDAO&#x…

360浏览器如何拦截和屏蔽网页广告

在浏览网页的时候总会弹出各种烦人的广告,用户可以使用浏览器设置,然后拦截掉网页的广告,操作起来非常的方便,用户可以使用浏览器马上学习起来,感兴趣的用户就一起来学习起来吧!马上就可以为用户提供最便捷的浏览方式&…

如何申请注销腾讯视频账号

今天小编给大家分享“如何申请注销腾讯视频账号”。腾讯视频在电视剧和电影播放过程中无广告,只要点击播放按钮,除了开头的广告外,视频畅快从头看到尾,当然现在有些电视剧直接把广告植入到剧中,哪怕你开了vip一样无法去…

mysql数据库表名大小写敏感_Mysql数据库名和表名的大小写敏感性问题

导读:一直以来,Mysql数据库名和表名的大小写都是个敏感的问题,困扰着Mysql数据库管理员。在 MySQL 中,数据库和表对应于那些目录下的目录和文件。因而,操作系统的敏感性决定数据库和表命名的大小写敏感。这就意味着数据…

手机优酷缓存的视频在哪找

很多人都喜爱在优酷视频上看剧或是影片,有时出门度假旅游或是乘火车等特殊情况,大家必须用手机优酷来下载好一些自身喜爱看的电视连续剧或是影片,便捷那时候没有网络,还可以在手机优酷上看电视剧,进而消磨无趣的時间。…

mysql触发器如果提示_mysql 触发器

1 引言Mysql的触发器和存储过程一样,都是嵌入到mysql的一段程序。触发器是mysql5新增的功能,目前线上凤巢系统、北斗系统以及哥伦布系统使用的数据库均是mysql5.0.45版本,很多程序比如fc-star管理端,sfrd(das),dorad…

PP视频怎么设置退出程序时清空本地播放记录

本文小编给大家分享PP视频怎么设置退出程序时清空本地播放记录,如果大家在使用PP视频过程当中遇到类似问题,欢迎阅读本文!大家都知道PP视频作为中国最大的视频分享网站,它有非常全面的视频资源。而我们只要通过下载这个客户端,就可…

python中属性是什么意思啊_python中的“对象属性”和一般属性是什么?

假设你有一个类Personclass Person:name "Samuel"age 50country "India"def method1(self):print("Method 1")print(dir(Person))上述程序的输出如下所示:^{pr2}$从上面的输出中可以看到,它返回该对象的有效属性的排序…

PP视频播放视频时如何关闭弹屏

本文小编给大家带来的是PP视频相关的内容。PP视频播放器官方下载电脑版始终以“用户体验”为生命,您可运行PP视频播放器,在线享受奇艺网站内全部免费高清正版视频。不管是哪个视频播放器都会有喜欢和不喜欢的用户,这是正常的情况,…

mysql too many connections_mysql too many connections 解决方法

1、mysql -u root -p 回车输入密码进入mysql2、show processlist;查看连接数,可以发现有很多连接处于sleep状态,这些其实是暂时没有用的,所以可以kill掉3、show variables like "max_connections";查看最大连接数,应该是…

qt更改类名_Qt编写自定义控件属性设计器

以前做.NET开发中,.NET直接就集成了属性设计器,VS不愧是宇宙第一IDE,你能够想到的都给你封装好了,用起来不要太爽!因为项目需要自从全面转Qt开发已经6年有余,在工业控制领域,有一些应用场景需要…