知识大全 编程乱码问题初步探索[2]

Posted 数据库

篇首语:当筵意气临九霄,星离雨散不终朝。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 编程乱码问题初步探索[2]相关的知识,希望对你有一定的参考价值。

  那么set names是什么呢? set names实际上就是同时设置了character_set_client character_set_connection character_set_results这三个系统变量

  例如set names gbk 等同于

set @@character_set_client = gbk set @@character_set_connection = gbk set @@character_set_results = gbk

  很多情况下 这样设置了之后就能把乱码问题解决了 但是还是不能完全避免出现乱码的可能 为什么呢?

  因为character_set_client character_set_connection这两个变量仅用与保证与character_set_database编码的一致 而character_set_results则用与保证SELECT返回的结果与程序的编码一致

  例如 你的数据库(character_set_database)用的是utf 的字符集 那么你就要保证character_set_client character_set_connection也是utf 的字符集 而你的程序也许采用的并不是utf 比如你的程序用的是gbk 那么你若把character_set_results也设置为utf 的话就会出现乱码问题 此时你应该把character_set_results设置为gbk 这样就能保证数据库返回的结果与你的程序的编码一致

  下面我给出一段用于设置字符集的代码(其中用到了一个我自己写的db库 相信应该不影响阅读)

<?//假设我们的程序采用的是utf 的字符集$program_char = utf ;//先检查mysql的版本号 如果版本号大于 我们才可以设置这些系统变量(mysql 还没有这些系统变量)$version = current($db >fetch_one( SELECT VERSION() ));if (substr($version ) > ) //取出当前数据库的字符集$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 );?>

  到此应该就可以解决绝大多数我们遇到的乱码问题了 另外还必须强调的是 有时候乱码的出现有可能是以上几种原因混合造成的

  对于这样的问题处理起来就比较的麻烦 因为首先要保证你在数据库中保存的数据的字符集与数据库的字符集是一致的 如果你在一个utf 的数据库中保存了GBK字符数据(如果你页面的编码与数据库的编码不一致 那么产生这个问题的可能性就很大) 那么假设以上的设置都正确 结果还是会出现乱码的问题 不过这类问题一旦确定了产生的原因 那么就还是有办法解决的 比如刚才我举的这个例子

  我们如果能确保其他环节的设置都是正确的 并且能够确认是由于把gbk的数据存到了utf 的数据库中而造成的乱码 那么我就可以把这些数据从数据库中取出来之后再用iconv()转换编码也是可以的

  总而言之 我们应当尽量的保证数据库中的数据是正确的 那么问题处理起来就相对简单了

  说了一大堆可能把你给弄迷糊了 我将其总结为以下四点 便于大家记忆

   要保证数据库中存的数据与数据库编码一致 即数据编码与character_set_database一致    要保证通讯的字符集与数据库的字符集一致 即character_set_client character_set_connection与character_set_database一致    要保证SELECT的返回与程序的编码一致 即character_set_results与程序编码一致    要保证程序编码与浏览器编码一致 即程序编码与<meta equiv= Content Type content= text/; charset=? />一致

cha138/Article/program/SQL/201311/16315

相关参考

知识大全 如何解决JSP页面显示乱码问题[2]

如何解决JSP页面显示乱码问题[2]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! &n

知识大全 Struts从零开始二、解决中文乱码的问题实例[2]

Struts从零开始二、解决中文乱码的问题实例[2]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

知识大全 JSP+ MySQL中文乱码问题post提交乱码解决方案

JSP+MySQL中文乱码问题post提交乱码解决方案  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧

知识大全 [Java] 部分乱码问题

[Java]部分乱码问题  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  前些日子QQ群里面的某个

知识大全 解决PHP初学者的乱码问题

解决PHP初学者的乱码问题  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!乱码一直是困扰PHP初学者

知识大全 解析Hibernate + MySQL中文乱码问题

解析Hibernate+MySQL中文乱码问题  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  如

知识大全 解决XMLHTTP提交过时返回乱码问题

解决XMLHTTP提交过时返回乱码问题  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 如

知识大全 Jsp环境下的AJAX乱码问题

Jsp环境下的AJAX乱码问题  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!cha138

知识大全 PHP下载文件名乱码问题详解

PHP下载文件名乱码问题详解  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  通过把Content

知识大全 如何解决JSP页面显示乱码问题[1]

如何解决JSP页面显示乱码问题[1]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! &n