NOVOTS KMS 词汇表 Glossary    联系我们 Contact Us
查询 Search  
   
按类别浏览 Browse by Category
NOVOTS KMS .: 数据库 .: MySQL编码机制与乱码

MySQL编码机制与乱码

在使用 PHP 连接 MySQL 查询出来的数据有的时候居然会是乱码,关于乱码的解决首先我们要了解MySQL编码机制。

拿 Discuz! 论坛为例,Discuz! 论坛在连接 MySQL 后会立即执行一个设定(见include/db_mysql.class.php ):

复制内容到剪贴板Code:

@mysql_query("SET character_set_connection=$dbcharset, character_set_results=$dbcharset, character_set_client=binary", $this->link); 此三处的字符设定很大程度上会解决乱码问题,那么这三个设定具体有什么作用呢?如果我们了解了MySQL编码机制,就可以避免在安装插件及平时的操作过程中产生乱码,还可以自行对论坛的数据进行转码。

character_set_client 我们可以理解为 SQL 语句的编码,如果设置为 binary,MySQL 就当二进制来处理,character_set_connection 设定的值则告诉 MySQL 用来运行 SQL 语句的时候使用的编码,也就是说,程序发送给 MySQL 的 SQL 语句,会首先被 MySQL 从 character_set_client 指定的编码转换到 character_set_connection 指定的编码,如果 character_set_clien 指定的是 binary ,则 MySQL 就会把 SQL 语句按照 character_set_connection 指定的编码解释执行。

当执行 SQL 语句的过程中,比如向数据库中插入取出数据的时候,字段也有编码设置,如果字段的编码设置和 character_set_connection 指定的不同,则 MySQL 会把插入的数据转换成字段设定的编码。

当 SQL 执行完毕向客户端返回数据的时候,会把数据从字段指定的编码转换为 character_set_results 指定的编码,如果 character_set_results=NULL 则不做任何转换动作,(注意这里设置为 NULL 不等于没有设置,没有设置的时候 MySQL 会继承全局设置)。

了解了MySQL编码机制,我们就可以利用这个机制进行数据的转码以及避免在程序使用过程中出现乱码了。

补充:

mysql_query("character_set_client=gbk"); 这句告诉 MySQL 我接下来要用的 SQL 语句的编码是 GBK 的

mysql_query("character_set_connection=gbk"); 这句 告诉 MySQL 要把 SQL 语句转换成 GBK 进行处理

mysql_query("character_set_results=gbk"); 这句告诉 MYSQL 查询返回的结果要统一都转换成 GBK 编码的


这篇文章对你多有用?

相关文章

article CentOS系统安装MySQL教程

(No rating)  5-31-2015    Views: 850   
article Mysql 删除表名中有特殊字符的表
由于公司业务和应用的调整,之前在Mysql中的很多表...

(No rating)  7-21-2014    Views: 1019   
article MySQL导入导出命令
1.导出整个数据库   mysqldump -u 用户名...

(No rating)  11-28-2011    Views: 1013   

用户评语

添加评语
当前还没有评语.


.: .: .: .: .:
[ 登陆 ]
北京护航科技有限公司 2006

Novots Technologies Limited