`
webcode
  • 浏览: 5943977 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

mysql中的乱码总结之mysql5中四个设置字符集的系统变量

阅读更多

http://www.corange.cn/archives/2008/10/2050.html

好多次更换mysql主机商时,都要造成mysql数据的乱码,因为网站开发历史经历了多个mysql版本,而且是在我刚刚学php时一点点做的,因为底层的东西很混乱,当时就没有也不知道如何处理字符串,今天决定好好的研究下它。mysql5提供了以下几个设置字符集的系统变量:character_set_client 客户端字符集character_set_connection 客户端与服务器端连接采用的字符集character_set_results SELECT查询返回数据的字符集character_set_database 数据库采用的字符集乱码问题一般是由于以上几个变量设置错误照成的,所以只要理解这几个变量,就可以与告别乱码了。使用上述变量,要理解这个核心思想: character_set_client,character_set_connection这两个变量保证要与 character_set_database编码的一致,而 character_set_results则保证与SELECT返回的结果与程序的编码一致。我们可以在程序中使用 set names来同时设置character_set_client, character_set_connection, character_set_results这三个系统变量。
例如 set names 'utf8' 等同于 :

set @@character_set_client = 'utf8'

set @@character_set_connection = 'utf8'

set @@character_set_results = 'utf8'一般情况下,当数据库与数据库表的字符集为utf8,我们再在程序里设置set names 'utf8'命令,这样就能保证无乱码了,但是,这里还要注意character_set_results变量的值,character_set_results的字符值是用来显示返回给用户的编码的。
例 如,你的数据库(character_set_database)用的是utf8的字符集,那么你就要保证 character_set_client,character_set_connection也是utf8的字符集。而你的程序也许采用的并不是 utf8,比如你的程序用的是gbk,那么你若把character_set_results也设置为utf8的话就会出现乱码问题。此时你应该把 character_set_results设置为gbk。这样就能保证数据库返回的结果与你的程序的编码一致。

以下摘自网络的一程序段:<?//假设我们的程序采用的是utf8的字符集$program_char = 'utf8';//先检查mysql的版本号,如果版本号大于4我们才可以设置这些系统变量(mysql4还没有这些系统变量)$version = current($db->fetch_one('SELECT VERSION()'));if (substr($version, 0, 1) > 4){//取出当前数据库的字符集$sql = 'SELECT @@character_set_database';$char = current($db->fetch_one($sql));//将客户端字符集(character_set_client)和连接字符集(character_set_connection)设置为与数据库字符集(character_set_database)一致$db->query('SET @@character_set_client = "' . $char . '"');$db->query('SET @@character_set_connection = "' . $char . '"');//将SELECT查询返回数据的字符集设置为与当前程序的字符集一致$db->query('SET @@character_set_results = "' . $program_char . '"');}?>1、要保证数据库中存的数据与数据库编码一致,即数据编码与character_set_database一致;2、要保证通讯的字符集与数据库的字符集一致,即character_set_client, character_set_connection与character_set_database一致;3、要保证SELECT的返回与程序的编码一致,即character_set_results与程序编码一致;4、要保证程序编码与浏览器编码一致,即程序编码与<meta http-equiv="Content-Type" content="text/html; charset=?"/>一致。

分享到:
评论

相关推荐

    MySQL如何解决DOS窗口乱码问题

    乱码问题如下: 导致问题产生的原因很简单,无非是命令行的编码和MySQL内部设置的编码出现了偏差。我们右键属性查看以下命令行的编码方式是GBK。 解决: mysql&gt; show variables like 'character%'; -- 模糊查询...

    基于MySQL的数据库中间件Meituan-DBProxy.zip

    修复分表查询结果合并时列字符集错误的问题,该问题可能会导致结果乱码 解决在分表情况下,返回值有 NULL 的情况下,查询超时的问题 此问题是DBProxy在多个分表merge结果的过程中未处理 NULL 值,导致...

    Win7下mysql5.5安装图文教程

    mysql安装比较简单,一般都是直接下一步,重点说一下需要注意的地方。 下载地址:https://www.mysql.com/downloads/ ...(5)设置环境变量 在cmd里面可以直接输入mysql 就可以运行mysql,否则必须先

    mysql zip archive 版本(5.7.19)安装教程详细介绍

    1. 从官网下载zip archive版本http://dev.mysql.com/downloads/mysql/ MySQL v5.7.19 官方正式版(32/64位 安装版与zip解压版) 2. 解压缩至相应目录,并配置环境变量(将...# 设置mysql客户端默认字符集 default-chara

    PHP开发实战1200例(第1卷).(清华出版.潘凯华.刘中华).part1

    实例112 解决用substr()函数对中文字符串截取时出现乱码的问题 143 实例113 字符串与HTML标记相互转换 144 实例114 运用PHP 5.0新型字符串输出XML数据 145 实例115 判断字符串中是否存在指定子串 146 2.9 正则表达式...

    PHP开发实战1200例(第1卷).(清华出版.潘凯华.刘中华).part2

    实例112 解决用substr()函数对中文字符串截取时出现乱码的问题 143 实例113 字符串与HTML标记相互转换 144 实例114 运用PHP 5.0新型字符串输出XML数据 145 实例115 判断字符串中是否存在指定子串 146 2.9 正则表达式...

    DISCUZ2.5 升级到Discuz!4.0.0的升级程序

     (默认情况下config.inc.php中已经对应设置好了,请不要随意修改) &lt;br&gt;另,对于某些mysql4.1版的用户,如果确定字符集为非UTF-8的话,如果升级后出现乱码请将config.inc.php中的$charset设置为gb2312试...

    PHP程序开发范例宝典III

    实例230 合并多个结果集 356 8.11 嵌套查询 358 实例231 简单的嵌套查询 358 实例232 复杂的嵌套查询 359 实例233 嵌套查询在查询统计中的应用 361 8.12 子查询 362 实例234 使用子查询作派生的表 362...

    jpivot学习总结.doc

    primaryKeyTable 如果成员表不只一个,而是多个表通过 join 关系形成的,那么就要通过这个属性来指明 join 的这些表中,哪一个与 Dimension 里设置的 foreignKey 属性形成外键关系。通过该属性来指明主表 caption ...

    易语言程序免安装版下载

    全面取消静态编译中的人为功能限制(此前有最多5个支持库同时参与静态链接等功能限制) 6. 公开易语言静态编译技术文档(参见sdk\static_docs),便于第三方支持库作者针对静态编译进行支持库改造 7. 修改以下多...

    Java开发实战1200例(第1卷).(清华出版.李钟尉.陈丹丹).part3

    全书分5篇24章,共计603个实例和603个经验技巧。每个实例都是经过笔者精心筛选的,具有很强的实用性,其中一些实例是开发人员难于寻觅的解决方案。 本书两卷共计1200个例子,包括了开发中各个方面最常用的实例,是...

    asp.net知识库

    利用反射来查看对象中的私有变量 关于反射中创建类型实例的两种方法 ASP.Net应用程序的多进程模型 NET委托:一个C#睡前故事 [推荐] - [原创] Microsoft .NET策略及框架概述 卸载Class? Web Form 窗体 如何实现web...

    ssh(structs,spring,hibernate)框架中的上传下载

     •FILE_ID:文件ID,32个字符,用Hibernate的uuid.hex算法生成。  •FILE_NAME:文件名。  •FILE_CONTENT:文件内容,对应Oracle的Blob类型。  •REMARK:文件备注。  文件数据存储在Blob类型的FILE_CONTENT...

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part5

    全书一共被压缩为5个rar,这是第五个!!!! 其他的请看ID:ljtt123(本人分享) 本博客提供的所有教程的资源原稿均来自于互联网,仅供学习交流之用,切勿进行商业传播。同时,转载时不要移除本申明。如产生任何...

Global site tag (gtag.js) - Google Analytics