mysql---字符集详解

常用的字符集包括ASCII ,GB2312 , GBK , UTF-8 ,Unicode

首先要知道

ASCII编码:

用一个字节来标识0-9的数字、大小写字母、及一些标点和不可见字符。1个字节8位,可以有256种组合。标准的ASCII编码只利用一个字节的后7位(128种组合),最高位用作奇偶校验。

范围为0000 0000 - 0111 1111 即 0-127

因为ASCII最多只有256种组合,中国汉字成千上万,所以需要更多的字节来表示一个汉字,常见中文编码的有GB2312和GBK。

GB2312编码:

是中国计算机的本地编码方式,用两个字节来表示一个汉字。为了兼容ASCII编码,这两个字节的取值范围都不在0-127,而是在128-255之间。则GB2312理论上最多有128*128=16384种组合。足够表示常用的汉字。

现有以下几个数,每个数表示一个字节,问哪些是GB2312编码,哪些是用ASCII编码?数字只是随便举的

128 200 65 189 178 23 213 186

128 200 因为两个字节都在128-255之间,所以是用GB2312编码的汉字

65 一个字节在0-127之间,所以是用ASCII编码的,实际表示的是小写字母‘a’。

189 178 同理是用GB2312编码的汉字

213 186 也是用GB2312编码的汉字

GBK编码:

是GB2312的升级版,收容了更多的汉字。它也是用两个字节表示汉字,第一个字节的理论范围依旧是128-255之间,但第二个字节范围变为0-255。理论上最多能表示128*256种组合。同样能兼容ASCII编码。

比如

128 65 65 189 178 23 213 186

因为128不在0-127之间,所以从128开始的2个字节表示的是一个汉字

65在0-127,所以用一个字节表示小写字母‘a’。

189 178 同理189不在0-127之间,表示的是一个汉字

213 186 同理213 不在0-127之间,表示的是一个汉字

Unicode字符集:

Unicode其实只是相当于一张表,用4个字节给去全世界的文字进行了编号。

UTF-8编码:

UTF-8和Unicode的关系,相当于压缩文件与源文件的关系,UTF-8用来压缩Unicode。UTF-8是变长编码,理论上用1到6字节来表示一个字符。

最高位是0的,用1个字节来表示一个字符

最高位有n个连续的1,则用个n个字节表示一个字符。

MySql乱码问题:

乱码问题有两种可能:1、解码与对应的编码不匹配。2、数据损坏。

第一种是可以解决的,第二种数据已损坏无法还原。

对于第一种情况,要先了解MySql的各个环节

客户端先按照客户端的编码方式对数据进行编码,然后传送到连接器,如果与连接器的编码方式不匹配再转换成连接器的编码。然后比对连接器的编码与存储数据的编码。如果连接器的编码方式与数据库存储数据的编码方式不一致,则接着转换成数据库存储数据的编码方式。同理,当返回结果时,数据库数据比对连接器编码,不一致则转成连接器编码,再比对连接器编码与结果集编码,不一致则转换成结果及编码。

总而言之,只要客户端、连接器、结果集编码保持一致,大部分情况是不会出现乱码的。

可以通过

set character_set_client = 编码方式;设置客户端编码

set character_set_connection=编码方式; 设置连接器编码

set character_set_results=编码方式; 设置接结果集编码

这三句话也可以简化为一句:set names 编码方式

mysql---字符集详解,布布扣,bubuko.com

时间: 2024-10-08 14:05:55

mysql---字符集详解的相关文章

MySQL字符集详解

一.什么是字符集: 简单的说吧.字符集就是一组对应关系的集合: 1.现在的计算机是在二进制的基础上建立出来的.二进制是数值的一种表达方式.也就是说二进制只的表达"数".如十进制的3,在二进制中 就可以写成00000011: 2.然而在现实生活当中相对于"数"而言我们用到更多的是"文字":那这个问题(怎么保存文字)怎么解决呢?然而这个问题根本没有难道 他们.它们决定用一个折中的方式解决:如:保存'a'的时候我就保存一个0,保存'b'的时候我就保存一

mysql 案例 ~ mysql字符集详解

一 谈谈mysql常见的字符集问题 二 字符集统一  1 character_set_server  2 character_set_client  3 java/php等连接字符集  4 character_set_database三 字符集分类  1 server 2 db 3 table 4 cloumn 如果不特意指定,将按照优先级从1-4进行选择四 字符集使用注意事项  1 在mysql安装的时候指定 character_set_server   2 养成创建库表指定字符集的良好修改,

MySQL存储过程详解 mysql 存储过程

MySQL存储过程详解  mysql 存储过程 (2010-12-13 10:59:38) 转载▼ 标签: it 分类: mysql mysql存储过程详解 1.      存储过程简介   我们常用的操作数据库语言SQL语句在执行的时候需要要先编译,然后执行,而存储过程(Stored Procedure)是一组为了完成特定功能的SQL语句集,经编译后存储在数据库中,用户通过指定存储过程的名字并给定参数(如果该存储过程带有参数)来调用执行它. 一个存储过程是一个可编程的函数,它在数据库中创建并保

MySQL存储过程详解 mysql 存储过程(转:http://blog.sina.com.cn/s/blog_52d20fbf0100ofd5.html)

转:http://blog.sina.com.cn/s/blog_52d20fbf0100ofd5.html mysql存储过程详解 1.      存储过程简介   我们常用的操作数据库语言SQL语句在执行的时候需要要先编译,然后执行,而存储过程(Stored Procedure)是一组为了完成特定功能的SQL语句集,经编译后存储在数据库中,用户通过指定存储过程的名字并给定参数(如果该存储过程带有参数)来调用执行它. 一个存储过程是一个可编程的函数,它在数据库中创建并保存.它可以有SQL语句和

MySQL 数据类型 详解

MySQL 数据类型 详解 MySQL 的数值数据类型可以大致划分为两个类别,一个是整数,另一个是浮点数或小数.许多不同的子类型对这些类别中的每一个都是可用的,每个子类型支持不同大小的数据,并且 MySQL 允许我们指定数值字段中的值是否有正负之分或者用零填补. 1.整型 MySQL数据类型 含义(有符号) tinyint(m) 1个字节 范围(-128~127) smallint(m) 2个字节 范围(-32768~32767) mediumint(m) 3个字节 范围(-8388608~83

MySQL安装详解

MySQL安装详解 [下载地址:http://dev.mysql.com/downloads/] 参考文献:http://dev.mysql.com/doc/refman/5.1/zh/installing.html 步骤1:选择安装类型 有3种安装类型:Typical(典型安装).Complete(完全安装)和Custom(定制安装). Typical(典型安装)安装只安装MySQL服务器.mysql命令行客户端和命令行实用程序.命令行客户端和实用程序包括mysqldump.myisamchk

mysql编码详解

在开发程序的时候,我们使用mysql数据库开发的时候,有时会碰到自己明明输入的是中文,为什么数据库中存储的就是???? 1.在配置Connection URL时,加上?useUnicode=true&characterEncoding=utf-8 2.编辑/etc/my.cnf 在[mysqld]下添加 default-character-set=utf8 在[client]下添加 default-character-set=utf8   可是这样做的原理是什么?为什么这样做就能解决问题那? 逐

MySQL存储过程详解 mysql 存储过程(二)

mysql存储过程详解1.      存储过程简介我们常用的操作数据库语言SQL语句在执行的时候需要要先编译,然后执行,而存储过程(Stored Procedure)是一组为了完成特定功能的SQL语句集,经编译后存储在数据库中,用户通过指定存储过程的名字并给定参数(如果该存储过程带有参数)来调用执行它.一个存储过程是一个可编程的函数,它在数据库中创建并保存.它可以有SQL语句和一些特殊的控制结构组成.当希望在不同的应用程序或平台上执行相同的函数,或者封装特定功能时,存储过程是非常有用的.数据库中

sql学习笔记(16)----------mysql存储过程详解

mysql存储过程详解 1.     存储过程简介   我们常用的操作数据库语言SQL语句在执行的时候需要要先编译,然后执行,而存储过程(Stored Procedure)是一组为了完成特定功能的SQL语句集,经编译后存储在数据库中,用户通过指定存储过程的名字并给定参数(如果该存储过程带有参数)来调用执行它. 一个存储过程是一个可编程的函数,它在数据库中创建并保存.它可以有SQL语句和一些特殊的控制结构组成.当希望在不同的应用程序或平台上执行相同的函数,或者封装特定功能时,存储过程是非常有用的.

MySQL存储过程详解 mysql 存储过程(转)

mysql存储过程详解 1.      存储过程简介   我们常用的操作数据库语言SQL语句在执行的时候需要要先编译,然后执行,而存储过程(Stored Procedure)是一组为了完成特定功能的SQL语句集,经编译后存储在数据库中,用户通过指定存储过程的名字并给定参数(如果该存储过程带有参数)来调用执行它. 一个存储过程是一个可编程的函数,它在数据库中创建并保存.它可以有SQL语句和一些特殊的控制结构组成.当希望在不同的应用程序或平台上执行相同的函数,或者封装特定功能时,存储过程是非常有用的