为什么80%的码农都做不了架构师?>>>   

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

[php] view plaincopy

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

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

之后在数据库查询前添加

[php] view plaincopy

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

转载于:https://my.oschina.net/beanGo/blog/220279

PHP连接MySQL查询结果中文显示乱码问题相关推荐

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

    我们首先假设数据库中采用的编码为UTF-8 这时我们在PHP页面中应当首先添加 此处charset的值utf-8必须与文件保存时的编码类型一样 之后在数据库查询前添加 mysql_query(&quo ...

  2. PLSQLDeveloper SQL查询内容中文显示乱码

    PLSQL Developer中文显示乱码是因为Oracle数据库所用的编码和PLSQL Developer所用的编码不同所导致的. 解决方法: 1,查询Oralce所用的编码 2,设置PLSQL 的 ...

  3. PLSQL查询结果中文显示乱码

    PLSQL中文显示乱码,可能是oracle客户端和服务器端的编码方式不一样. 在这里,我们使用的是服务器上的Oracle,不是本机的Oracle,按照以下两个步骤进行:首先要查询ORACLE服务器的语 ...

  4. MySQL命令行中文显示乱码解决

    原文地址:www.cnblogs.com/qmfsun/p/4846467.html MySQL会出现中文乱码的原因不外乎下列几点: 1.server本身设定问题,例如还停留在latin1 2.tab ...

  5. 【PyQt5】连接 mysql 查询数据 并显示在 tableWidget 表格

    PyQt5 数据库建表 + SQL 语句 Qt designer 制作界面 连接 MySQL 相关知识 查询并获取数据库的数据 运行效果 数据库建表 + SQL 语句 建立一个数据库:test 建立一 ...

  6. yii2 pdo mysql 乱码_YII2.0使用PDO连接Oracle库查询结果中文显示乱码问题

    自己来解答,直接上代码. 创建链接测试用小程序如下: namespace app\models; use Yii; use yii\db\ActiveRecord; use \yii\db\Conne ...

  7. servlet中中文正常显示,mysql数据库手动插入中文正常显示,servlet向mysql中插入中文显示乱码...

    作者:http://5563447.blog.51cto.com/5553447/1422627 问题是:就是POST请求提交表单数据给servlet,通过JDBC插入Mysql,出现中文乱码. 解决 ...

  8. oracle11g怎么显示中文,ORACLE11G中PLSQL中文显示乱码、Linux下sqlplus查询中文乱码

    问题描述: 本地是win7操作系统,cmd里面sqlplus进去连接oracle数据库,中文可以正常显示,但是plsql连接oracle数据库,中文显示乱码,还有xshell远程连接oracle服务器 ...

  9. mysql的中文乱码url,MySQL 中文显示乱码

    MySQL 中文显示乱码 MySQL 中文显示乱码 如果你遇到乱码问题,可以从下面几个问题逐步检查: (1)检查你的文件存储编码是否和 meta 声明的一致,假如你的文件是按照 utf-8 编码存储, ...

  10. 01_Linux系统系统语言查询,设置Xshell工具,中文显示,测试Xshell中文字符显示,Linux中文显示乱码设置

              Xshell是一个强大的安全终端模拟软件,它支持SSH1,SSH2,以及Microsoft Windows平台的TELNETNetSarang Xshell 4 Build 0 ...

最新文章

  1. 《用Python进行自然语言处理》第 11 章 语言数据管理
  2. 微软职位内部推荐-SDEII for Windows Phone Apps
  3. 解析python数据后用html输出
  4. Linux内核移植之三:内核配置选项
  5. rsync的配置文件模板及简单介绍,命令及参数
  6. 【Python】判断列表 list 是否为空
  7. 手把手教你做关键词匹配项目(搜索引擎)---- 第六天
  8. nessuss中文使用手册
  9. C/C++:Windows编程—创建进程、终止进程、枚举进程、枚举线程、枚举DLL
  10. python运行游戏是否需要pygame_用Python和Pygame写游戏-从入门到放弃(1)
  11. BZOJ 3685 普通van Emde Boas树 权值线段树(zkw)
  12. OpenGL超级宝典(第7版)笔记1 清单的初始环境配置part1
  13. 将oracle端口1521共享_[转]利用oracle1521端口抓鸡
  14. eclipse插件下载及使用
  15. MySQL的登陆【数据库系统】
  16. 亚马逊养号遛号Selenium自动化测试工具介绍,依托于VMLogin指纹浏览器配套实现。
  17. 《MIT科技评论》“35位35岁以下科技创新青年”名单出炉!AI领域有5人入选 | 2020中国区...
  18. 优秀产品经理所需具备的7种能力
  19. PTA 7-5 字符串的连接
  20. 层次模型的概念,举出三个层次模型的实例!

热门文章

  1. 在PHP中怎么判断字符串中没有,在php中搜索字符串中没有的字符
  2. No package ‘libusb‘ found
  3. 同一批人做的产品,一年跟十年,产品质量不会有任何变化
  4. 全网首发:麒麟平台更新时提示错误:无法解析域名“archive.kylinos.cn”
  5. 2020-11-16梦笔记
  6. MAC编译OpenJDK8:clang: error: include path for libstdc++ headers not found(独家解决办法)
  7. 全网首发:FreeSwitch BANNER支持中文
  8. eclipse注释中,文字大小不等的解决办法
  9. 解决办法:自动挂载失效,VirtualBox共享文件夹给Ubuntu虚拟机
  10. 版本分支不宜间隔太久