深入Mysql字符集设置 图文版

所属分类: 数据库 / Mysql 阅读数: 726
收藏 0 赞 0 分享

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的字符编码

更多精彩内容其他人还在看

MySQL的日志基础知识及基本操作学习教程

这篇文章主要介绍了MySQL的日志基础知识学习教程,包括MySQL中日志相关常用的服务器变量说明,极力推荐!需要的朋友可以参考下
收藏 0 赞 0 分享

MySQL入门完全指南及Linux系统下基本的安装教程

这篇文章主要介绍了MySQL入门完全指南及Linux系统下基本的安装教程,对MySQL的基本特性有一个较为详细的整理,需要的朋友可以参考下
收藏 0 赞 0 分享

MySQL针对Discuz论坛程序的基本优化教程

这篇文章主要介绍了MySQL针对Discuz论坛程序的基本优化教程,包括在缓存和索引等方面的优化方法,需要的朋友可以参考下
收藏 0 赞 0 分享

MySQL的InnoDB引擎入门学习教程

这篇文章主要介绍了MySQL的InnoDB引擎入门学习教程,对InnoDB的存储结构有一个较好的总结,需要的朋友可以参考下
收藏 0 赞 0 分享

MySQL下常见的启动失败与备份失败问题的解决教程

这篇文章主要介绍了MySQL下常见的启动失败与备份失败问题的解决教程,示例环境基于Linux系统,需要的朋友可以参考下
收藏 0 赞 0 分享

MySQL日志分析软件mysqlsla的安装和使用教程

这篇文章主要介绍了MySQL日志分析软件mysqlsla的安装和使用教程,文中以Linux系统作为环境进行示例,需要的朋友可以参考下
收藏 0 赞 0 分享

修改MySQL的默认密码的四种小方法

对于windows平台来说安装完MySQL后,系统就已经默认生成了许可表和账户,下文中就教给大家如何修改MySQ的默认密码。
收藏 0 赞 0 分享

傻瓜式用Eclipse连接MySQL数据库

本来不想写这么简单人文章,在百度上搜索我这个标题,完全符合标题的一大堆。但我按照那些文章捣鼓了很久,就是不行。
收藏 0 赞 0 分享

修改MySQL的数据库引擎为INNODB的方法

本文主要介绍了修改MySQL的数据库引擎为INNODB的方法,希望能对您有所帮助。
收藏 0 赞 0 分享

Mysql数据库命令大全

mysql命令大家经常会用到,但是很少有朋友整理吧,最近项目不多,抽个时间把mysql数据库命令总结给大家,需要的朋友可以参考下
收藏 0 赞 0 分享
查看更多