`
qlma
  • 浏览: 53660 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

MySql编码机制

阅读更多
大家都知道从 MySQL4.1 版本开始,支持多种编码,包括我们熟知的 latin1、gbk、utf8、big5 等等,还有一些我们闻所未闻的。


在使用 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 编码
分享到:
评论

相关推荐

    MySQL 编码机制

    MySQL的编码机制是数据库系统处理各种字符集的关键组成部分,它涉及到如何存储、处理和传输文本数据,特别是涉及多语言和特殊字符的情况。在处理中文查询时,了解这些机制至关重要,可以有效防止出现乱码问题。 `...

    MySQL Internals Manual.pdf

    - MySQL编码规范和风格指南 - MySQL服务器代码的基本结构 - 使用CMake构建MySQL服务器的详细步骤和选项 - MySQL插件的构建方法 - MySQL内部使用的数据结构和内存管理技术 - 如何通过阅读源代码来理解MySQL的工作原理...

    IDEA编码GBK不可映射字符解决方法

    解决这种错误的关键是理解IDEA的编码机制和GBK编码的特点。GBK是一种常用的中文编码方案,它主要用于简体中文的编码。然而,GBK编码存在一些局限性,例如它不支持所有 Unicode 字符,这可能会导致IDEA在编译代码时...

    mysql服务器性能分析(MySQL执行机制、SQL执行过程、连接池配置、表结构设计).docx

    #### 二、MySQL执行机制 ##### 1、连接池配置 连接池是用于管理与数据库之间连接的一种机制,它可以有效减少建立和销毁连接带来的性能开销。对于MySQL而言,连接池的配置主要包括以下几点: - **最小连接数**:连接...

    mysql-5.5.25a

    1. **InnoDB 存储引擎增强**:MySQL 5.5 强化了默认存储引擎 InnoDB,包括支持更高的并发性,改进了事务处理能力,提供了更好的行级锁定机制,以及对大表的更高效处理。InnoDB 也增加了自适应哈希索引(Adaptive ...

    广告管理系统 PHP+MySQL 版,utf8 编码

    这个特定的系统是基于PHP和MySQL构建的,使用UTF-8编码,确保了多语言环境下的兼容性和数据的正确显示。PHP是一种广泛使用的服务器端脚本语言,尤其适用于Web开发,而MySQL则是一款流行的开源关系型数据库管理系统,...

    mysql问题,常见的mysql面试问题

    - 自动恢复机制,能够保证数据一致性。 - **选择建议**: - 如果应用对读取性能要求较高且不需要事务支持,可以选择MyISAM。 - 对于需要事务处理和并发控制的应用场景,推荐使用InnoDB。 #### 6. 触发器的作用及...

    include mysql库文件

    在iOS开发中,如果你需要与MySQL数据库进行交互,你需要包含MySQL的...然而,由于iOS的沙盒机制,直接在客户端连接MySQL可能涉及安全问题,通常的做法是通过Web服务(如API)作为中间层,以更安全的方式处理数据交换。

    promethues(普罗米修斯)监控mysql-详细文档

    - **服务发现**:通过文件或 Consul 等服务发现机制动态发现要监控的目标实例。 对于 Docker 容器中的服务,可以使用 Docker 服务发现来自动发现并添加监控目标。在这个例子中,Prometheus 需要配置为监控 `mysql_...

    MySQL-connector-java-8.0.28

    - 自动重试机制,对于网络波动或短暂的数据库服务中断,驱动程序会尝试自动重新连接。 - 集成了MySQL的新的查询优化器特性,提高查询效率。 - 对Unicode字符集的支持更加完善,包括UTF-8和其他多字节编码。 在实际...

    MySQL 是怎样运行的:从根儿上理解 MySQL(上).pdf

    MySQL支持多种字符集,用于处理不同语言和编码的文本数据。字符集决定了数据如何存储,而比较规则则定义了字符排序和比较的标准,对于处理国际化数据尤为重要。 4. **InnoDB记录结构** InnoDB是MySQL中最常用的...

    mysql-jdbc驱动包8.0.11

    此外,为了安全起见,应避免在代码中硬编码数据库凭据,而是使用环境变量、配置文件或者连接池来管理这些敏感信息。 总结来说,MySQL JDBC驱动包8.0.11是Java开发者连接到MySQL数据库的关键组件,特别是在JSP应用中...

    基于MySQL数据库的植物编码基因数据挖掘初步分析.pdf

    【MySQL数据库在植物编码基因数据挖掘中的应用】 MySQL是一个广泛使用的开源关系型数据库管理系统,它在生物信息学领域,特别是大规模基因数据存储和分析中扮演着重要角色。在这个初步分析中,作者宋东光和陈小英...

    MySQL驱动 mysql-connector-net-6.6.6

    5. **安全性**:支持SSL加密连接,确保数据在传输过程中的安全,同时支持各种身份验证机制,如MySQL的默认插件、SHA256密码插件等。 6. **复制支持**:可以与MySQL的主从复制功能配合,实现读写分离,提升系统性能...

    mysql-connector-java-5.1.26源码

    10. **字符编码处理**: MySQL Connector/J处理了各种字符编码问题,确保Java字符串和数据库中的数据正确交互。在源码中,我们可以看到`com.mysql.jdbc.CharsetMapper`和`com.mysql.jdbc.StringUtils`的相关实现。 ...

    mysql 5.14安装程序

    7. **Unicode支持**:MySQL 5.14全面支持Unicode(UTF-8编码),可以处理各种语言和字符集,满足多语言应用的需求。 **安装过程** 1. **下载**:首先,你需要下载`mysql-essential-5.1.41-win32.msi`文件到你的...

Global site tag (gtag.js) - Google Analytics