计算中的字符文字集合(每一个自负文字分配一个对应的数字),将字符集中的文字符号进行编码以便于计算机识别处理。sql
字符编码就是如何在计算机中存储表示字符集中每一个字符文字对应的数字。数据库
20世纪60年代初,美国标准化组织ANSI发布了第一个字符集 ASCII 后来演变成了国际标准 ISO-646。服务器
ASCII采用7位编码,包含大小写英文字母、阿拉伯数字和标点以及33个控制符号。网络
以后制定的字符集大部分都兼容ASCII编码。编码
随后各国、个公司纷纷制定本身的字符集标准,好比:GBK、GB2312-80、ISO-8859系列等。到了20世界80年代,你们都崩溃了。。。这么多字符集很难进行软件国际化,而后你们就想着能不能统一字符编码。spa
为了统一这个字符集,1984年ISO的一些成员国开始发起制定新的国际字符集标准,用来容纳世界各国的语言文字,而后UCS(ISO-10646)诞生了。code
可是这个UCS遭到了美国不少计算机公司的反对,1988年联合微软、苹果、IBM、SUN等公司成立Unicode 协会,并于1991年推出Unicode1.0。server
而后ISO和Unicode协会为了统一编码标准,1991年10月达成协议,ISO将Unicode编码并入UCS的0组0面中(简称为BMP,UCS编码划分为group、plane、row、cell)。由于是0组0面,因此就不须要存储了,2个字节进行编码就足以,因此就理所固然的叫作UCS-2。ci
为了能使用BMP之外的文字,Unicode提出了UTF-16的解决方案,将BMP外的文字(包含组面共32位),转为两个16位的Unicode编码。io
可是问题又来了,当时的计算机和网络智能处理但字节的数据流,为了让UTF-16更好的兼容,将BMP内外的文字转换成了1-4字节的编码,不一样数量字节的编码表示UCS中不一样范围的编码。
GB2312-80 于1980年根据ISO/IEC2022提供的字符编码,定义为双字节字符集。
GB13000 于1993年在GB2312-80基础上扩充了大量文字,但并无受到业界支持。
GBK 于1995年在GB2312-80基础上扩充了大量文字,同时兼容GB2312。同时由于获得微软支持而流行。
GB18030发布于2000年,分为2字节和4字节编码,2字节部分与GBK保持一致。因此GB18030是GBK的超集。
SHOW CHARACTER SET;
结果能够分为字符集和校对规则两部分。
同一个字符集能够对应多个校对规则。
_ci 结尾的校对规则对大小写不敏感。
_cs 结尾的校对规则对大小写敏感
_bin 结尾的校对规则只比较原始编码,不比较编码后的值。
MySQL的字符集设定分为4个级别:服务器、数据库、表、字段
服务器级别须要在my.cnf中设置 character-set-server 选项 或者在启动的时候指定。
数据库级别须要在建立的时候经过charset指定。
表级别和字符级别须要在建立表的时候制定字符集和校对规则。
character_set_client 客户端字符集和校对规则
character_set_connection 会话链接字符集和校对规则
character_set_results 返回结果的字符集和校对规则
一般使用 SET NAMES xxx 的方式对三个同时设定
或者在SQL语句中使用 _字符集名称来强制使用指定字符集
SELECT _gbk "我是中国人"