1.汉字一些常用的字符集

GB 2312-80
GB 13000
GBK
GBK 18030

2.怎样选择合适的字符集

如应用要处理各种各样的文字,就应该选择 Unicode MySQL用户 目前就是utf-8
如果数据库只需要支持一般中文,数据量很大,性能要求很高,就应该选择双字节定长编码的中文字符集
如果数据库需要做大量的字符运算,如比较,排序,那么选择定长字符集可能会更好
如果客服端程序都支持同样的字符集,则应该优先选择该字符集

3.MySQL支持的字符集

查看所有可用的字符集
image.png

查看information_schema.character_sets,可以显示所有的字符集和该字符集默认的校对规则
image.png

MySQL字符集包括字符集和校对规则,字符集和校对规则是一对多的关系。
image.png

校对规则命名规范:他们都是以其相关的字符集名开始,通常包括一个语言名,并且以_ci(大小写不敏感)、_cs(大小写敏感)、_bin(二元,即比较是基于字符串编码的值而与language无关)结束。
image.png

4.MySQL字符集的设置

MySQL的字符集和校对规则有四个默认设置:服务器级,数据库级,表级,字段级

4.1服务器字符集和校对规则

在my.cnf中设置
将 character-set-server=gbk
在启动项中指定
mysqld —character-set-server=gbk
在编译时指定
shell>cmake . -DDEFAULT-CHARSET=gbk

查看当前服务器的字符集和校对规则
show variables like ‘character_set_server’;
show variables like ‘collation_server’;
image.png

4.2 数据库字符集和校对规则

表字符集可在创建库的时候指定,也可以通过 alter database 命令进行修改
alter database character set *

显示当前的数据库的字符集和校对规则
show variables like ‘character_set_database’;
show variables like ‘collation_database’;
image.png

4.3表字符集和校对规则

表字符集可在创建表的时候指定,也可以通过 alter table 命令进行修改
alter table character set *
显示表的字符集和校对规则
show create table 表名 \G;
image.png

4.4 列字符集和校对规则

使用几率很小

4.5连接字符集和校对规则

对于实际的应用访问来说,还存在客户端和服务器之间的交互的字符集和校对规则设置。

MySQL提供了三个参数:character_set_client(客户端),character_set_connection(连接),character_set_results(返回结果),要保证这三个相同才能保证用户写入的数据可以正确的读出。

  1. set names ***;
  2. #同时修改这三个参数的值,需要应用每次连接数据库后都执行此命令
  3. [mysql]
  4. default-charaction-set=gbk
  5. #在my.ini设置以下的语句,而不需要在程序中再执行set names命令
  6. select _gbk '字符集';
  7. select _latin1 '字符集';
  8. #强制字符串的字符串和校对规则

image.png

5.字符集的修改步骤

alter database character set * 没有更新已有记录的字符集

5.1导出已有的数据并调整