MySQL 编码机制

 更新时间:2008年12月06日 11:07:04   作者:  
一般在MYSQL使用中文查询 都是用 set NAMES character
character_set_client ,这是用户告诉MySQL查询是用的什么字符集。
character_set_connection ,MySQL接受到用户查询后,按照character_set_client将其转化为character_set_connection设定的字符集。
character_set_results , MySQL将存储的数据转换成character_set_results中设定的字符集发送给用户。
DISCUZ并没有使用set NAMES character
SET NAMES 'x'语句与这三个语句等价:
mysql> SET character_set_client = x; mysql> SET character_set_results = x; mysql> SET character_set_connection = x;
而DISCUZ里面是
复制代码 代码如下:

@mysql_query("SET character_set_connection=$dbcharset, character_set_results=$dbcharset, character_set_client=binary", $this->link);

SET character_set_client = binary;使用二进制字符集查询
此三处的字符设定很大程度上会解决乱码问题,那么着三个设定具体有什么作用呢?
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语句中的条件判断和SQL插入语句的执行过程类似.
当SQL执行完毕像客户端返回数据的时候,会把数据从字段指定的编码转换为character_set_results指定的编码,如果character_set_results=NULL 则不做任何转换动作,(注意这里设置为NULL不等于没有设置,没有设置的时候MySQL会继承全局设置),
工作中比较有用的就是利用MySQL进行转码、不同编码的数据库之间共用数据。

相关文章

  • MYSQL存储过程即常用逻辑知识点总结

    MYSQL存储过程即常用逻辑知识点总结

    在本篇文章里小编给大家整理的是关于MYSQL存储过程即常用逻辑知识点,有需要的朋友们可以学习下。
    2019-08-08
  • MySQL慢查询日志中的Lock_time由来解析

    MySQL慢查询日志中的Lock_time由来解析

    这篇文章主要为大家介绍了慢查询日志中Lock_time的由来解析,以及Lock_time 包含哪些锁等待时间、以及是怎么计算得到的,有需要的朋友可以借鉴参考下,希望能够有所帮助
    2023-06-06
  • MYSQL如何 查询数据库中所有表中的数据量

    MYSQL如何 查询数据库中所有表中的数据量

    INFORMATION_SCHEMA.TABLES 是 MySQL 中的系统表,用于存储关于数据库中的表的信息,这篇文章主要介绍了MYSQL如何 查询数据库中所有表中的数据量,需要的朋友可以参考下
    2024-01-01
  • MySQL数据类型全解析

    MySQL数据类型全解析

    这篇文章主要介绍了MySQL数据类型的相关资料,帮助大家更好的理解和使用MySQL数据库,感兴趣的朋友可以了解下
    2021-01-01
  • 如何解决局域网内mysql数据库连接慢

    如何解决局域网内mysql数据库连接慢

    通过内网连另外一台机器的mysql服务, 确发现速度N慢! 等了大约几十秒才等到提示输入密码。非常急人,有没有办法可以解决局域网内mysql数据库连接慢呢?下面小编带领大家来解决此问题,感兴趣的朋友一起看看吧
    2015-09-09
  • Windows下mysql 8.0.12 安装详细教程

    Windows下mysql 8.0.12 安装详细教程

    这篇文章主要为大家详细介绍了Windows下mysql 8.0.12 安装详细教程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-02-02
  • MySQL 使用DQL命令查询数据的实现方法

    MySQL 使用DQL命令查询数据的实现方法

    这篇文章主要介绍了MySQL 使用DQL命令查询数据的实现方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-08-08
  • Mysql子查询IN中使用LIMIT应用示例

    Mysql子查询IN中使用LIMIT应用示例

    有3张表,infor信息表,mconfig物料配置表,maaply物料申请表,要求是读出申请表中哪些人申请哪些物料,接下来为大家介绍下Mysql子查询IN中使用LIMIT
    2014-01-01
  • MySQL Binlog 日志处理工具对比分析

    MySQL Binlog 日志处理工具对比分析

    这篇文章主要介绍了MySQL Binlog 日志处理工具对比分析的相关资料,帮助大家更好的理解和学习使用MySQL数据库,感兴趣的朋友可以了解下
    2021-03-03
  • MySQL 5.6主从报错的实战记录

    MySQL 5.6主从报错的实战记录

    这篇文章主要给大家介绍了关于MySQL 5.6主从报错的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-03-03

最新评论