9.Mysql字符集
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字符集的更多相关文章
- 如何修改MySQL字符集
首先,MySQL的字符集问题主要是两个概念,一个是Character Sets,一个是Collations,前者是字符内容及编码,后者是对前者进行比较操作的一些规则.这两个参数集可以在数据库实例.单个 ...
- Mysql字符集设置
转 基本概念 • 字符(Character)是指人类语言中最小的表义符号.例如’A'.’B'等:• 给定一系列字符,对每个字符赋予一个数值,用数值来代表对应的字符,这一数值就是字符的编码(Encodi ...
- MySQL字符集
字符集的选择 1.如果数据库只需要支持中文,数据量很大,性能要求也很高,应该选择双字节定长编码的中文字符集(如GBK).因为相对于UTF-8而言,GBK"较小",每个汉字只占2个字 ...
- mysql5.5字符集设置的一点变化(对于中文乱码问题,需要设置mysql字符集)
工作中因为字符集问题没少头疼,还犯过一次错误,还好拯救及时,没有发生重大事故,唉,弄清楚点还是非常有必要的: 例如我的工作环境为CTR+redhat5+mysql5.5 在导入sql语句的时候必须要注 ...
- Mysql字符集知识总结
字符集&字符编码方式 字符集(Character set)是多个字符的集合,字符集种类较多,每个字符集包含的字符个数不同,这里的字符可以是英文字符,汉字字符,或者其他国家语言字符. 常见字符集 ...
- MySQL字符集的修改和查看
1.关于MySQL字符集 MySQL的字符集支持(Character Set Support)有两个方面: 字符集(Character set)和排序方式(Collation). MySQL对于字符集 ...
- MySQL字符集转换引发插入乱码问题
根据http://www.cnblogs.com/cchust/p/4601536.html进行验证测试 问题背景 在mysql上面执行一条普通的insert语句,结果报错: Incorrect st ...
- MySQL 字符集设置
/*************************************************************************** * MySQL 字符集设置 * 说明: * 数 ...
- [MySQL] 字符集的选择
1. Mysql支持的字符集 MySQL服务器可以支持多种字符集,不同的字段都可以使用不同的字符集. 查看所有可用字符集: show character set; select * from info ...
- Mysql字符集设置 2 图
基本概念 • 字符(Character)是指人类语言中最小的表义符号.例如'A'.'B'等: • 给定一系列字符,对每个字符赋予一个数值,用数值来代表对应的字符,这一数值就是字符的编码(Encodin ...
随机推荐
- Android 操作UI线程的一些方法
我们经常会在后台线程中去做一些耗时的操作,比如去网络取数据.但是当数据取回来,需要显示到页面上的时候,会遇到一些小麻烦,因为我们都知道,android的UI页面是不允许在其他线程直接操作的.下面总结4 ...
- 关于T-SQL中exists或者not exists子查询的“伪优化”的做法
问题起源 在使用t-sql中的exists(或者not exists)子查询的时候,不知道什么时候开始,发现一小部分人存在一种“伪优化”的一些做法,并且向不明真相的群众传递这一种写法“优越性”,实在看 ...
- (转)MySQL 获得当前日期时间 函数
select *from High_valwhere SerialDate >= curdate() and SerialDate < date_add(curdate(), interv ...
- Oracle数据库操作总是显示运行中无法成功,删除表时报错 resource busy and acquire with NOWAIT specified
1.直接运行以下语句: select t2.username,t2.sid,t2.serial#,t2.logon_timefrom v$locked_object t1,v$session t2wh ...
- SSM商城项目(二)
1. 学习计划 1.将工程改造为基于SOA架构 2.商品列表查询功能实现. 2. 将工程改造为SOA架构 2.1. 分析 由于商城是基于soa的架构,表现层和服务层是不同的工程.所以要实现商品列表查询 ...
- Numpy知识之随机散步实例
类似于投硬币,简单的随机散步就是在前进一步(+1)和后退一步(-1)之间随机选择. 生成多个随机漫步. 并对多个随机漫步进行简单分析.
- 如何解决Android Studio解决DDMS真机/模拟器无法查看data目录问题
android app开发中,文件.SharedPreference或数据库默认保存在/data文件夹下,有时需要查看该文件夹下数据文件是否创建成功时,发现竟然打不开data目录: 具体解决方式如下: ...
- rect用法
//如果创建一个Rect对象rect(100, 50, 50, 100),那么rect会有以下几个功能: rect.area(); //返回rect的面积 5000 rect.size(); //返回 ...
- SAP 000 客户端初始登录
Solution 在SAP系统DB中删除账号SAP*,SAP系统会自动创建SAP*这个账号,然后初始密码是“PASS”,这样就获得Client 000 SAP*账号. Step by Step 以Or ...
- Spring-session redis 子域名 session
Spring-session & redis 子域名共享session 例子: a.example.comb.example.comSpring 版本 4.2.6.RELEASE Spring ...