大家都知道从 MySQL4.1 版本开始,支持多种编码,包括我们熟知的 latin1、gbk、utf8、big5 等等,还有一些我们闻所未闻的。
在使用 PHP 连接 MySQL 查询出来的数据有的时候居然会是乱码,关于乱码的解决首先我们要了解 MySQL 的编码机制。
拿 Discuz! 论坛为例,Discuz! 论坛在连接 MySQL 后会立即执行一个设定(见include/db_mysql.class.php ):
@mysql_query("SET
character_set_connection=$dbcharset, character_set_results=$dbcharset,
character_set_client=binary", $this->link);
-
<
p
>@
mysql_query
(
"SET character_set_connection=$dbcharset, character_set_results=$dbcharset, character_set_client=binary"
,
$this
->
link
);</
p
>
此三处的字符设定很大程度上会解决乱码问题,那么这三个设定具体有什么作用呢?如果我们了解了 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 编码的
分享到:
相关推荐
全国省市区编码mysql全国省市区编码mysql全国省市区编码mysql全国省市区编码mysql
mysql编码问题
mysql插入数据库编码解决mysql插入数据库编码解决
MySQL的中文编码问题,是在Java Web开发中经常遇到的问题,本文件给出了一种解决方案
MySQL的默认编码是Latin1,不支持中文,要支持中午需要把数据库的默认编码修改为gbk或者utf8。
mysql编码规则,表的命名规范
系统介绍mysql锁机制
php mysql安全机制
linux下安装mysql,utf-8编码处理,以及远程连接
中国城市编码 sql mysql 数据库 ,中国所有的城市编码,三级城市编码,数据库脚本 ,中国城市编码 sql mysql 数据库 ,中国所有的城市编码,三级城市编码,数据库脚本 ,中国城市编码 sql mysql 数据库 ,中国所有的...
MySQL 中修改编码配置文件全面配置,适合初学者,一看就会!!
本文详细描述了MYSQL锁机制,掌握锁机制,对于避免死锁,提高软件的工作效率,有很大的帮助.
Mysql数据库乱码 问题彻底解决 针对JAVA
MySQL的锁、锁机制的解释。想看就看,勿过于勉励
是一个介绍mysql内部机制及如何进行sql优化的教程。
高德api 高德地址编码表 mysql版全国省、市、区行政区域mysql信息表,包含:区域名称、城市编码、邮政编码、经纬度、名称拼音,sql文件,mysql导入可用;
该文档详细介绍了MySQL的锁机制,个人认为比较容易理解,总体都是个人记录,包括截图。
MYSQL锁机制全揭秘,锁对数据库而言显得尤其重要,也更加复杂。
4.城乡划分代码说明:mysql数据库,树结构存储。包括:编码;名称;全称;所属省,市,区县,街道;拼音首字母;城市类型(直辖市,省会);同级下排序;深度;城乡分类代码及经纬度。 5.四级地址:...
MySQL锁机制_管理(并发锁,行锁,表锁,预加锁,全局锁等等).mht