字符集
给每个文字符号编号以便于计算机识别处理,就有了计算机字符集。
字符集概述
- ANCII(American Standard Code for Information Interchange)
- 进一步变成国际标准ISO-646
- 该字符集采用7位编码,定义了包括大小写英文字母、阿拉伯数字和标点符号,以及33个控制符号
- ISO-8859
- GB2312-80
- GBK
- BIG 5
Unicode简述
为了统一字符编码,国际标准化组织ISO的一些国家指定新的国际字符标准,叫做USC,标准编号定位ISO-10646
-
ISO-10646采用4字节编码,将代码空间划分为组、面、行、格
-
1991年,ISO将Unicode编码并入ISO-10646的0组0字面,叫做基本多语言文字面【BMP
-
ISO-10646足以容纳人类从古至今使用过的所有文字和符号,但绝大部分文字已经很少使用了,超过99%的在用文字都编入了BMP,因此,绝大部分情况下,Unicode都满足需求,并在节省内存和处理时间上都有优势。
-
为了解决使用上诉两个字面之外的文字,Unicode提出了UTF-16解决方案。
- UTF-16:对BMP的字面的编码保持二字节不变,对其它字面的文字按一定规则将其32位编码转换为2个16位的Unicode编码
汉字
- GB 2312-80
- 早期标准
- GBK
- 不是国标,但挺多系统支持
- GB 18030
- 是GBK的超集
常用
- UTF-8
- 不是定长,1~4字节编码
- GBK
- 是定长,双字节编码
- UTF-16
- 不是定长,2字节或4字节编码
选择
- 满足应用支持语言的需求
- 涉及已有数据的导入,考虑兼容性
- 如果需要大量的字符运算,选择定长字符集较好
- 数据量大,支持一般中文,性能要求高,用GBK
MySQL支持的字符集简介
使用命令
show character set;
查看所有可用的字符集或
desc information_schema.character_sets;
显示所有的字符集和该字符集默认的校对规则
字符集
- 30多种,用来定义MySQL存储字符串的方式
校对规则
- 70多种,用来定义比较字符串的方式
字符集和校对规则是一对多的关系,每个字符集至少对应一个校对规则
MySQL字符集的设置
- MySQL有四个级别的默认设置:服务器级、数据库级、表级和字段级
服务器级
-
设置字符集
-
在my.conf文件内设置
[mysqld]
character-set-server=gbk
-
在启动选项种指定
mysqld --character-set-server=gbk
-
编译时指定
shell>cmake . -ddefault-charset=gbk
-
-
默认为latin1
-
关于校对规则
show variables like 'collation_server';
数据库级
- 设置【可在创建时指定,也可用alter database 修改
- 如果设置了字符集和校对规则,使用指定的
- 如果没有指定字符集,按照校对规则关联的字符集
- 如果没有指定校对规则,按照字符集的默认
- 如果都没有指定,按照服务器的默认
表级
- 设置
- 规则同上类似
- 查看
show create table tablename \G;
列级
- 基本同上【一般不会遇到吧
连接字符集和校对规则【未实操过,待补充
应用访问时,客户端和服务器之间交互的设置
set names ***
【具体还未操作过
字符集的修改
应用开始阶段没有正确设置,不想丢弃数据
- 先将数据导出
- 调整数据
- 创建新的字符集的数据库,将调整后数据导入