9.字符集
9.1 字符集概述
字符集就是一套文字符号及其编码、比较规则的集合。
ASCII(American Standard Code for Information Interchange)字符集:采用7位编码,包括大小写英文字母、阿拉伯数字和标点符号,及33个控制符号等。
9.2 Unicode字符集
ISO-10646采用4字节编码,简称UCS-4,将代码空间分为4部分(组group、面plane、行row、格ceil),每部分各占一个字节。
Unicode采用2字节编码,Unicode编码被纳入UCS-4的0组0面,称为基本多语言字面,共65534个码位。
UTF是USC和Unicode格式转换(Transformation Format)的缩写,分为UTF-8和UTF-6.
UTF-8按一定规则将ISO-10646或Unicode字元码转换成1~4个字节的编码,其中将ASCII码(0~0x7F)转换成单字节编码。

9.3 汉字及一些常见字符集
GB 2312-80 双字节编码字符集,收录6763个常用汉字。
GB 13000 除收录GB 2312-80外还收录全部汉字及偏旁部首,共27484个。
GBK 除收录GB 2312-80外还收录中日韩全部汉字及偏旁部首,共20902个。
GB18030 2字节或4字节编码,兼容GB13000和GBK。
字符集 是否定长 编码方式 其他说明
ASCII 是 单字节7位编码 最早的、奠基性字符集
latin1 是 单字节8位编码 西欧字符集
GBK 是 双字节编码
UTF-8 否 1~4字节编码

9.4 怎样选择合适的字符集
考虑因素:UTF-8
满足应用对语言的需求,尽量选择支持多语言的字符集;
考虑对已有数据的兼容;尽量选择已有数据的超集,而非子集;
考虑字符集编码长度对性能的影响,尽量选择编码长度短的字符集;
考虑字符运算对性能的影响,尽量选择定长字符集,而非变长字符集;
考虑客户端程序对字符集的支持,尽量保持前后端字符集一致,避免发生字符集转换。

9.5 Mysql支持的字符集简介
Mysql支持统一台服务器不同的数据库、同一个数据库不同的表、同一个表不同列可以使用不同的字符集。
Mysql字符集分为4个层级:服务器字符集、数据库字符集、表字符集、列字符集。
Mysql字符集包括字符集(character)和校对规则(collation)两部分,
字符集(character)用来定义存储字符串的方式;
校对规则(collation)用来定义比较字符串的方式;
字符集和校对规则是一对多关系,即一个字符集可以有多个校对规则;
每个字符集默认对应一个校对规则。
校对规则命名:
字符集_语言名_ci大小写不敏感
字符集_语言名_cs大小写敏感
字符集_bin基于字符编码的值比较与语言无关,对大小写敏感

查看可用字符集:
show character set;
或者查看information_schema.character_set表
查看某个字符集的所有校对规则和默认校对规则:
show collation like 'gbk%';
或者查看information_schema.collations表
例子:
select case when 'A' COLLATE gbk_chinese_ci ='a' COLLATE gbk_chinese_ci then 1 else 0 end;
select case when 'A' COLLATE gbk_bin ='a' COLLATE gbk_bin then 1 else 0 end;

9.6 Mysql字符集的设置
Mysql字符集分为4个级别:服务器字符集、数据库字符集、表字符集、列字符集。
9.6.1 服务器字符集和校对规则
在my.cnf文件中设置:
[mysqld]
character-set-server=gbk
在启动项中指定:
mysqld --character-set-server=gbk
在编译时指定:
cmake -DDEFAULT_CHARSET=gbk
默认使用latin1作为服务器字符集;
在设置字符集时没有指定校对规则,默认使用字符集默认校对规则;
如果要使用字符集非默认校对规则,则需要在设置字符集时一同设置校对规则。
查看当前服务器字符集和校对规则:
show variables like 'character_set_server';
show variables like 'collation_server';

9.6.2 数据库字符集和校对规则
数据库字符集和校对规则在创建数据库时指定,也可以在创建完数据库后通过alter database命令进行修改。
查看当前数据库字符集和校对规则:
show variables like 'character_set_database';
show variables like 'collation_database';
数据库字符集起效规则:
当设置了数据库字符集和校对规则时,则使用指定的字符集和校对规则;
当设置了数据库字符集且未设置校对规则时,则使用指定的字符集和字符集默认校对规则;
当未设置数据库字符集但设置了校对规则时,则使用指定的校对规则和与该校对规则关联的字符集;
当未设置数据库字符集和校对规则时,则使用服务器字符集和校对规则。

9.6.3 表字符集和校对规则
表字符集和校对规则在创建表时指定,也可以在创建完表后通过alter table命令进行修改。
查看当前表字符集和校对规则:
show create table table_name;
表字符集起效规则:
当设置了表字符集和校对规则时,则使用指定的字符集和校对规则;
当设置了表字符集且未设置校对规则时,则使用指定的字符集和字符集默认校对规则;
当未设置表字符集但设置了校对规则时,则使用指定的校对规则和与该校对规则关联的字符集;
当未设置表字符集和校对规则时,则使用数据库字符集和校对规则。

9.6.4 列字符集和校对规则
在建表时可以为不同列设置不同的字符集,也可以使用alter table table_name modify column col_name为列修改为不同的字符集。
一般表中所有列与表保持相同的字符集和校对规则。

9.6.5 连接字符集和校对规则
连接字符集和校对规则时客户端与服务器交互的字符集和校对规则。
参数character_set_client、character_set_connection、character_set_results分别代表客户端、连接和返回结果的字符集。
这三个参数要保持相同,才能确保写入的数据能够被正确读出。
同时设置3个参数的命令:
set names gbk;
一次设置了3个参数的字符集,但只对一次连接有效。
在my.cnf中设置:
[mysql]
default-character-set=gbk
对所有连接都有效。
字符串常量的字符集由参数character_set_connection决定。
可以通过命令修改字符串常量的字符集,
例子:
select -gbk '字符串常量';
select -utf-8 '字符串常量';

9.7 字符集的修改步骤
将latin1字符集的数据库修改成GBK字符集的过程如下:
1)导出表结构
mysqldump -uroot -p --default-character-set=gbk -d scott > C:\table.sql
说明:
--default-character-set=gbk 设置连接字符集为gbk
-d 只导出表结构,不导出数据
2)手工修改scott.sql中表结构定义中的字符集为新的字符集
3)确保记录不再更新,导出所有记录
mysqldump -uroot -p --quick --no-create-info --extended-insert --default-character-set=latin1 databasename> C:\data.sql
说明:
--quick 用于转储大的表,强制mysqldump从服务器一次一行地检索表中的行而不是检索所有行,并在输出前将它缓存到内存中。
--extended-insert 使用包括几个values列表的多行insert语法,导出文件更小,导入时速度更快。
--no-create-info 不导出create table语句,只导数据
--default-character-set=latin1 按照原有的字符集导出所有数据,保证中文不会出现乱码
4)打开导出文件,将set names=latin1修改为set names=gbk;
5)使用新的字符集创建新的数据库。
create databases db_name default charset gbk;
6)创建表,执行table.sql
mysql -uroot -p db_name < table.sql
7)导入数据,执行data.sql
mysql -uroot -p db_name < data.sql

9.8 小结

9.Mysql字符集的更多相关文章

  1. 如何修改MySQL字符集

    首先,MySQL的字符集问题主要是两个概念,一个是Character Sets,一个是Collations,前者是字符内容及编码,后者是对前者进行比较操作的一些规则.这两个参数集可以在数据库实例.单个 ...

  2. Mysql字符集设置

    转 基本概念 • 字符(Character)是指人类语言中最小的表义符号.例如’A'.’B'等:• 给定一系列字符,对每个字符赋予一个数值,用数值来代表对应的字符,这一数值就是字符的编码(Encodi ...

  3. MySQL字符集

    字符集的选择 1.如果数据库只需要支持中文,数据量很大,性能要求也很高,应该选择双字节定长编码的中文字符集(如GBK).因为相对于UTF-8而言,GBK"较小",每个汉字只占2个字 ...

  4. mysql5.5字符集设置的一点变化(对于中文乱码问题,需要设置mysql字符集)

    工作中因为字符集问题没少头疼,还犯过一次错误,还好拯救及时,没有发生重大事故,唉,弄清楚点还是非常有必要的: 例如我的工作环境为CTR+redhat5+mysql5.5 在导入sql语句的时候必须要注 ...

  5. Mysql字符集知识总结

    字符集&字符编码方式 字符集(Character set)是多个字符的集合,字符集种类较多,每个字符集包含的字符个数不同,这里的字符可以是英文字符,汉字字符,或者其他国家语言字符. 常见字符集 ...

  6. MySQL字符集的修改和查看

    1.关于MySQL字符集 MySQL的字符集支持(Character Set Support)有两个方面: 字符集(Character set)和排序方式(Collation). MySQL对于字符集 ...

  7. MySQL字符集转换引发插入乱码问题

    根据http://www.cnblogs.com/cchust/p/4601536.html进行验证测试 问题背景 在mysql上面执行一条普通的insert语句,结果报错: Incorrect st ...

  8. MySQL 字符集设置

    /*************************************************************************** * MySQL 字符集设置 * 说明: * 数 ...

  9. [MySQL] 字符集的选择

    1. Mysql支持的字符集 MySQL服务器可以支持多种字符集,不同的字段都可以使用不同的字符集. 查看所有可用字符集: show character set; select * from info ...

  10. Mysql字符集设置 2 图

    基本概念 • 字符(Character)是指人类语言中最小的表义符号.例如'A'.'B'等: • 给定一系列字符,对每个字符赋予一个数值,用数值来代表对应的字符,这一数值就是字符的编码(Encodin ...

随机推荐

  1. Structs复习 通配符

    1.jar包 web.xml <?xml version="1.0" encoding="UTF-8"?> <web-app version= ...

  2. hexo发表博文

    3.4创建博客文章与发布 在hexo 目录下终端命令: $ hexo new '文件名' //会在source/_posts创建一个文件名.md文件 这就可以使用markdown编辑器开始写自己的博客 ...

  3. js判断json对象中是否含有某个属性

    obj.hasOwnProperty("key"); 原地址:https://blog.csdn.net/feicongcong/article/details/53463872

  4. python3.6安装-windows

    1.打开python官网 2.找到下载链接 3.选择对应的版本下载 4.下载完成后打开安装包并执行,运行出该界面. 5.这里是安装到C盘上(默认安装) 6.此处为自定义安装 7.选择自定义安装,并全选 ...

  5. console.log() 字体颜色

    console.log("%c%s", "color: #fff; background: #20B2AA; font-size: 24px;", " ...

  6. svn 更新lib库时,报错

    svn: E195012: Unable to find repository location for svn:// in revision 9718 Can't revert without re ...

  7. 基于oslo_messaging的RPC通信

    oslo_messaging源于Openstack的一个经典的模块,用以实现服务间的RPC通信.Client端将数据放入rabbitmq中,server端从消息队列中获取传送数据. oslo.mess ...

  8. JMeter调试工具--Debug Sampler(转载)

    转载自 http://www.cnblogs.com/fengpingfan Debug Sampler添加路径:[添加 / Sampler / Debug Sampler],面板设置如下: 打开JM ...

  9. log4j最中意的配置

    log4j.rootLogger=DEBUG, Console, logfile log4j.appender.Console=org.apache.log4j.ConsoleAppender log ...

  10. 已知一个函数rand7()能够生成1-7的随机数,请给出一个函数rand10(),该函数能够生成1-10的随机数。

    题目: 已知一个函数rand7()能够生成1-7的随机数,请给出一个函数,该函数能够生成1-10的随机数. 思路: 假如已知一个函数能够生成1-49的随机数,那么如何以此生成1-10的随机数呢? 解法 ...