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---字符集详解的更多相关文章
- MySQL字符集详解
Reference: https://www.cnblogs.com/wcwen1990/p/6917109.html MySQL字符集详解 一.字符集和校验规则 字符集是一套符合和编码,校验规 ...
- mysql 案例 ~ mysql字符集详解
一 谈谈mysql常见的字符集问题 二 字符集统一 1 character_set_server 2 character_set_client 3 java/php等连接字符集 4 chara ...
- MySQL 数据类型 详解
MySQL 数据类型 详解 MySQL 的数值数据类型可以大致划分为两个类别,一个是整数,另一个是浮点数或小数.许多不同的子类型对这些类别中的每一个都是可用的,每个子类型支持不同大小的数据,并且 My ...
- mysql存储过程详解
mysql存储过程详解 1. 存储过程简介 我们常用的操作数据库语言SQL语句在执行的时候需要要先编译,然后执行,而存储过程(Stored Procedure)是一组为了完成特定功能的S ...
- mysql 存储过程详解 存储过程
mysql存储过程详解 1. 存储过程简介 我们常用的操作数据库语言SQL语句在执行的时候需要要先编译,然后执行,而存储过程(Stored Procedure)是一组为了完成 ...
- MySQL配置文件详解
MYSQL 配置文件详解 “全局缓存”.“线程缓存”,全局缓存是所有线程共享,线程缓存是每个线程连接上数据时创建一个线程(如果没有设置线程池),假如有200连接.那就是200个线程,如果参数设定值是1 ...
- MySQL存储过程详解 mysql 存储过程
原文地址:MySQL存储过程详解 mysql 存储过程作者:王者佳暮 mysql存储过程详解 1. 存储过程简介 我们常用的操作数据库语言SQL语句在执行的时候需要要先编译,然后执行,而存储 ...
- MySQL存储过程详解 mysql 存储过程(二)
mysql存储过程详解 1. 存储过程简介 我们常用的操作数据库语言SQL语句在执行的时候需要要先编译,然后执行,而存储过程(Stored Procedure)是一组为了完成特定功能的SQL ...
- MySQL程序之mysql参数详解
MySQL程序之mysql参数详解 mysql 是一个命令行客户程序,用于交互式或以批处理模式执行SQL语句 用法: mysql [OPTIONS] [database] 参数: 1.-? --hel ...
- mysql编译参数详解
mysql编译参数详解(./configure) 1.--prefix=PREFIX:指定程序安装路径: 2.--enable-assembler:使用汇编模式:(文档说明:compiling i ...
随机推荐
- 关于python文件操作 (转载)
总是记不住API.昨晚写的时候用到了这些,但是没记住,于是就索性整理一下吧: python中对文件.文件夹(文件操作函数)的操作需要涉及到os模块和shutil模块. 得到当前工作目录,即当前Pyth ...
- 学习Java设计模式的10条建议
设计模式在整个Java的学习路线图中扮演着承上启下的作用. 在整个软件生命周期中,唯一不变的就是变化.设计模式就是要在软件设计.编码中对现有问题的一种总结,并从中寻求应对变化的策略. 自己初次接触设计 ...
- 百度之星资格赛,hdu 4825 XOR SUM
显然是要建一棵0.1树 事实上非常easy就是二叉树,仅仅只是为了操作简便,即程序的速度,所以就採用静态树,即不动态分配内存,使用较大的全局数组.0是根节点 #include<cstdio> ...
- android自动填充短信验证码
自动拦截短信实际上就是在系统注册一个BroadcastReceiver,然后通过设置拦截短信的: filter.addAction("android.provider.Telephony.S ...
- Linux curl命令详解
用途说明 curl命令是一个功能强大的网络工具,它能够通过http.ftp等方式下载文件,也能够上传文件.其实curl远不止前面所说的那些功能,大家可以通过man curl阅读手册页获取更多的信息.类 ...
- 文件和目录之umask函数
本篇博文内容摘自<UNIX环境高级编程>(第二版),仅作个人学习记录所用.关于本书可参考:http://www.apuebook.com/. umask函数为进程设置文件模式创建屏蔽字,并 ...
- DOS 命令 attrib:修改文件属性
有时候系统中病毒之后会把自己的所有文件的属性改为隐藏只读格式,如果手动修改的话太麻烦并且浪费时间,不如用 Attrib 命令试试. 步骤: 1:开始->运行,在里面输入 cmd,打开命令行界面: ...
- nopCommerce的源代码结构和架构
下载地址 nopcommerce的源代码很容易拿到,它是开源的,所以你可以直接到网上下载.下载地址:http://www.nopcommerce.com/downloads.aspx 因为nop是国外 ...
- 深入学习block
首先,什么是block?block其实就是一个代码块,把你想要执行的代码封装在这个代码块里,等到需要的时候再去调用.那block是OC对象吗?答案是肯定的. 做一道很简单的关于block的测试题: i ...
- JAVA_JSON_example
package cn.kjxy.JSON; import java.util.List; import org.json.JSONArray; import org.json.JSONExceptio ...