# 理解MySql字符集
# 字符集
字符集即为字符编码的集合。
常用的编码格式为:ASCII
Unicode-8
Unicode-16
Unicode-32
GB2312
等 ,
其中GB2312
主要用于【简体汉字】的编码,而BIG5
是【繁体汉字】的编码格式,不同的语言文字都有自己的编码格式,其中Unicode
编码是一种通用的编码格式,目的是为了同时兼容不同的语言文字编码。
# 字符序
字符序即字符编码集合中每个字符的顺序。
例如:A的十进制可以表示为65,a为97,其中65<97也就是说在字符集中A的顺序在a的前面,但这只是对计算机而言的,因为计算机认识的是二进制语言,对于人来说我们可以理解为A=a,只是书写的形式不同而已。
在字符集中每一个字符都有它自己的顺序,不存在两个字符拥有相同的字符编码。但在数据库中不同,mysql也是如此,所以才会定义出字符序的概念,A与a编码不同,但在数据库中我们可以按照字符序把这两个字符看做相同的,那么也就是说当你选择了不同的字符序时可能A与a表现出来的大小关系也会随着变化。
# MySql中的字符集
MySql是一款关系型数据库,它存储的数据不应该受限于特定的语言文字,所以它支持不同字符集。
通常在数据的存储过程中,为了管理的方便,会将数据不同的数据集合做一下归类,比如:一个数据库是有一个或多个database构成,那么多个table又构成了一个database,table又是由行构成,行的最小单位又为列,列才是我们真正存储数据的地方:要储存必然离不开编码的问题。所以MySQL中我们可以按照这种虚拟关系对:database,table,column分别设置字符集,而它们使用字符集的优先关系为:column > table > database。
# 设置修改MySql中的字符集
- MySql默认字符集 在安装MySql的时候我们可以通过源码编译的方式设置字符集,当然这种安装方式比较难就不做说明了,真实的环境中这么做的好处并不明显。
- 修改MySql默认字符集 通过配置文件修改默认字符集,如果在创建database的时候我们没有指定字符集,则该设置会默认应用于database上。 # 该配置项会修改默认的字符集编码格式 [mysqld] character-set-server=utf8
- 通过环境变量设置字符集 这种方式也不常用,更何况这个docker盛行的年代,如果需要请自行google一下吧。
- 设置database的字符集 CREATE DATABASE test CHARACTER SET utf8 COLLATE utf8_general_ci # 修改现有数据库的字符集 alter database test character set utf8 collate utf8_bin
- 这是table的字符集 CREATE TABLE [table]( id varchar(40), str varchar(40) ) CHARSET=utf8mb4 COLLATE=utf8mb4_bin # 修改现有表的字符集 alter table [table] CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin
- 设置column的字符集 CREATE TABLE [table]( id varchar(40), str varchar(40) charset utf8mb4 collate utf8mb4_bin ) # 修改现有列字符集 alter table [table] change str str varchar(100) character set utf8 collate utf8_bin
# 其它帮助项
查看支持的字符集
代码语言:javascript复制# 两种方法查看支持的字符集
方法一:
show character set;
//方法二:
use information_schema;
select * from character_sets;
# 两种方式查看支持的字符序
# 方式一:
show collation;
# 方式二:
use information_schema;
select * from collations;
查看MySql字符集
代码语言:javascript复制# 查看字符集
show variables like 'character_set_server';
# 查看字符序
show variables like 'collation_server';
查看数据库字符集
代码语言:javascript复制show create database [dbname];
查看表字符集
代码语言:javascript复制show create table [table]
查看列字符集
代码语言:javascript复制show full columns from [table]