深入Mysql字符集设置 图文版

 更新时间:2012年09月04日 23:30:30   作者:  
在mysql客户端与mysql服务端之间,存在着一个字符集转换器

mysql客户端与mysql服务端之间,存在着一个字符集转换器。

character_set_client          =>gbk:转换器就知道客户端发送过来的是gbk格式的编码

character_set_connection=>gbk:将客户端传送过来的数据转换成gbk格式

character_set_results        =>gbk:

注:以上三个字符集可以使用set names gbk来统一进行设置

例子:

create table test(

name varchar(64) NOT NULL

)charset utf8;#这里的utf8表示服务器端的字符编码

 

首先,往数据表test中插入一条数据

inert into test values('测试');

则,数据“测试”在数据库中是以“utf8”格式保存的

过程:

 

首先,通过mysql客户端,将数据发送给Mysql服务器,经过字符集转换器的时候,由于character_set_connection 值为gbk,所以会将客户端发送过来的数据转为gbk格式,紧接着,字符集转换器将数据要传送给服务器的时候,发现服务器是以utf8保存数据的,所以,在其内部会自动将数据由gbk转换成utf8格式

什么时候会出现乱码?

    客户端的数据格式与声明的 character_set_client不符

        通过 header('Content-type:text/html;charset=utf8');将客户端的数据转成utf8格式的,在数据经过“字符集转换器”的时候,由于character_set_client=gbk,而character_set_connection也等于gbk,所以从客户端传送过来的数据(其实是utf8格式)并不会被转换格式。

        但是,字符集转换器在讲数据发送给服务器的时候,发现服务器要的格式是utf8,所以会将当前数          据当做gbk格式来处理,从而转成utf8(但是,这一步其实已经错了。。。)。

    2.  result与客户端页面不符合的时候        

 将返回结果的格式设置为utf8,但是客户端接受的格式为gbk,因此会出现乱码

通过show character set 语法,可以显示所有可用的字符集

latin字符集

注意:Maxlen列显示用于存储一个字符的最大的字节数目。

utf8字符集

 

gbk字符集

什么时候会丢失数据?

对比以上三幅图可以知道,每种字符集中,用于存储一个字符的最大的字节数目都不同,utf8最大,latin最小。所以在经过字符集转换器的时候,如果处理不当,会造成数据丢失,而且是无法挽回的。

比如:

character_set_connection的值改为lantin的时候

从客户端发送过来的gbk数据,会被转成lantin1格式,因为gbk格式的数据占用的字符数较多,从而会造成数据丢失

总结:

character_set_client和character_set_results 一般情况下要一致,因为一个表示客户端发送的数据格式,另一个表示客户端接受的数据格式为了避免造成数据丢失,需让 character_set_connection的字符编码 大于 character_set_client的字符编码

相关文章

  • SQL实现Excel的10个常用功能的示例详解

    SQL实现Excel的10个常用功能的示例详解

    SQL,数据分析岗的必备技能,你可以不懂Python,R,不懂可视化,不懂机器学习。但SQL,你必须懂。本文为大家总结了SQL实现Excel的10个常用功能的示例代码,感兴趣的可以了解一下
    2022-07-07
  • InnoDB 类型MySql恢复表结构与数据

    InnoDB 类型MySql恢复表结构与数据

    MySQL中.frm文件:保存了每个表的元数据,包括表结构的定义等,该文件与数据库引擎无关。MySQL中.ibd文件:InnoDB引擎开启了独立表空间(my.ini中配置innodb_file_per_table = 1)产生的存放该表的数据和索引的文件。
    2018-01-01
  • Mysql Explain 详细介绍

    Mysql Explain 详细介绍

    这篇文章主要介绍了Mysql Explain 详细介绍的相关资料,这里对Mysql Explain 的语法,属性,以及如何使用,做了全面介绍,需要的朋友可以参考下
    2016-11-11
  • mysql 8.0.17 解压版安装配置方法图文教程

    mysql 8.0.17 解压版安装配置方法图文教程

    这篇文章主要为大家详细介绍了mysql 8.0.17 解压版安装配置方法图文教程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-09-09
  • php连接MySQL的两种方式对比

    php连接MySQL的两种方式对比

    这篇文章主要介绍了php连接MySQL的两种方式对比,一种是原生的链接方式另外一种是PDO方式,附上示例,推荐给大家,有需要的小伙伴可以参考下
    2015-04-04
  • MySQL如何利用DCL管理用户和控制权限

    MySQL如何利用DCL管理用户和控制权限

    这篇文章主要介绍了MySQL如何利用DCL管理用户和控制权限,帮助大家更好的理解和学习MySQL的使用,感兴趣的朋友可以了解下
    2020-11-11
  • 超详细的mysql图文安装教程

    超详细的mysql图文安装教程

    这篇文章主要为大家分享了一份超详细的mysql图文安装教程,安装步骤有详细的说明,,需要的朋友可以参考下
    2016-05-05
  • MySQL常用命令大全脚本之家总结

    MySQL常用命令大全脚本之家总结

    这篇文章主要介绍了MySQL常用命令,总结了经常使用的MySQL命令,需要的朋友可以参考下
    2014-02-02
  • MySQL字符串函数详解(推荐)

    MySQL字符串函数详解(推荐)

    下面小编就为大家带来一篇MySQL字符串函数详解(推荐)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-06-06
  • MySQL实战教程之Join语句执行流程

    MySQL实战教程之Join语句执行流程

    这篇文章主要介绍了MySQL Join语句执行流程,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-03-03

最新评论