相信很多朋友在写程序的过程中都受到过乱码的骚扰,那么今天我就这个问题来同大家探讨一 下。 乱码的问题分为很多种,很多人一见到有乱码就开始骂mysql,其实很多情况下并不是mysql造 成的。 从乱码产生的原因来分析,乱码的产生一般有以下几种情况。 1、网页编码与程序编码不一致的问题 所谓的网页编码问题就是指你的html代码中定义的“charset”,例如以下这段代码: <head> <title>Chat Tutorial Application</title> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <meta name="language" content="en" /> <meta name="author" content="Padraic Brady" /> <link rel="stylesheet" href="public/styles/chat.css" type="text/css" /> <script src="public/javascript/scriptaculous/lib/prototype.js" type="text/javascript"></script> <script src="public/javascript/scriptaculous/src/scriptaculous.js" type="text/javascript"></script> <script src="javascript/chat.js" type="text/javascript"></script> </head> |
他设置了浏览器端采用gb2312的字符集,此时如果程序使用的是utf8的编码(就是指以什么样 的编码来编写的程序,一般在编辑器中设置),那么就会产生乱码。 此时的解决方法就是把charset的值改为utf8 2、代码本身就存在乱码问题 这种情况是指你的代码本身就存在乱码问题。造成这种情况的原因一般是你以另一种编码格式 修改了你的代码后并做了保存,这样你的程序中就有几种编码形式的代码,那么输出的时候自然就 会有乱码。这类问题相对来说比较容易解决,只要人工找到那段有乱码的代码,然后修改就行了(很 多编辑器可以完成这个工作)。 3、mysql的问题(此次讨论仅围绕mysql5.0之后的版本展开) 现在再来看最容易造成乱码,也是最容易让人迷糊的mysql乱码问题。 要说mysql乱码,得先从mysql的几个参数说起,从mysql5开始,多了几个设置字符集的系统变 量: character_set_client 客户端字符集 character_set_connection 客户端与服务器端连接采用的字符集 character_set_results SELECT查询返回数据的字符集 character_set_database 数据库采用的字符集 乱码问题一般是由于以上几个变量设置错误造成的,很多人在请教乱码问题的时候,一般都会 得到一个这样的答案:“你先setnames一下”。 那么setnames是什么呢?setnames实际上就是同时设置了character_set_client, character_set_connection,character_set_results这三个系统变量。
例如setnames'gbk'等同于: set @@character_set_client ='gbk' set @@character_set_connection ='gbk' set @@character_set_results ='gbk' |