【MySQL基础】字符集与校对集详解

序号系列文章
【MySQL基础】MySQL介绍及安装
【MySQL基础】MySQL基本操作详解
【MySQL基础】MySQL基本数据类型
【MySQL基础】MySQL表的七大约束
文章目录2,字符集和校对集的设置 结语
前言
大家好,我是小杨!今天我将详细的为大家介绍MySQL中的字符集与校对集的相关知识 , 希望大家能够从中收获多多!
字符集与校对集 1,字符集与校对集的概述 1.1,字符集
1,字符集的含义
字符指计算机中保存的各种文字和符号 , 包括各种国家的文字、标点符号、图形、符号、数字等 。
由于计算机采用的是二进制保存数据,用户输入的字符将会按照一定的规则转化为二进制后保存,这个过程就是字符编码 。
将一系列的字符的编码规则组合起来 , 就形成了字符集,用于表示特定的文本信息 。
2,常见的字符集
在计算机的发展历史中,出现了许多的字符集,MySQL也提供了各种各样的字符集的支持 。
常用的字符集有以下几种:
字符集单字符最大长度支持的语言
1字节
西欧字符 , 希腊字符等
gbk
2字节
简体和繁体中文,日文,韩文等
utf8
3字节
世界上大部分国家的文字
4字节
支持几乎所有的语言
注意事项:
单字符占用的存储空间越多,所支持的语言种类就越多 。表中的字符集均向下兼容ASCII(美国信息交换标准代码),如果输入的字符在ASCII的范围内,则编码结果是相同的 。MySQL中的utf8编码和标准的UTF-8之间存在差异 , 标准的UTF-8中的一个字符最多占用4个字节 , 而utf8的最多占用3个字节 。utf8的单字符占用最大字节数少于UTF-8的,进而导致出现UTF-8中的一些特殊字符(表情)在MySQL的utf8编码中无法使用的情况编码的引进解决了上述问题 , 表示的所有字符 , 包括表情符号和一些较少使用的字符 。
3,查看MySQL中的字符集
MySQL中提供了挺多的字符集的支持 , 查看MySQL中可用字符集基本语法如下:
SHOW CHARACTER SET;
操作结果如下:
操作结果分析:
:字符集名称
:描述信息
:默认校对集
:单字符的最大长度
1.2 , 校对集
1,校对集的含义
校对集是数据比较的规则,用于为不同的字符集指定比较和排序规则 。
校对集依赖字符集 , 每个字符集有多种校对规则 。
2,校对集名称的构成
字符集对应的校对集为
3,校对集的查看
MySQL也提供了许多的字符集,查看MySQL中可用校对集基本语法如下:
SHOW COLLATION;
操作结果如下:
操作结果分析:
:校对集名称

【MySQL基础】字符集与校对集详解

文章插图
:对应的字符集
Id:校对集ID
:是否为对应字符集的默认校对集
:是否已编译
:排序的内存需求量
2,字符集和校对集的设置
MySQL 的字符集和校对规则有 4 个级别的默认设置,即服务器级、数据库级、表级和字段级 。
它们分别在不同的地方设置,作用也不相同 。
2.1,MySQL环境
1,当前会话使用的字符集查看
SHOW VARIABLES LIKE 'CHARACTER%';
操作结果如下:
操作结果说明:
上述结果是显示当前会话使用的字符集,在不同的客户端环境中的输出结果可能不相同 。不同的客户端可以指定不同的字符集环境配置,服务器会按照不同的字符集环境配置进行处理 。会话是指从客户端登录服务器 , 直到退出服务器的整个过程,可以依次打开多个客户端进行操作,进而产生不同的会话 。如果没有指定服务器字符集,MySQL 会默认使用作为服务器字符集 。如果只指定了字符集,没有指定校对规则 , MySQL 会使用该字符集对应的默认校对规则 。如果要使用字符集的非默认校对规则 , 需要在指定字符集的同时指定校对规则 。
2,MySQL环境与字符集相关的变量
变量名含义
客户端字符集
tion
客户端与服务器连接使用的字符集
se
默认数据库使用的字符集
stem
文件系统字符集
s
将查询结果()返回给客户端的字符集
服务器默认字符集
服务器用来存储标识符的字符集
安装字符集的目录
注意事项说明:
,tion,s,这4个变量是重点,需特别注意 。决定了新创建的数据表默认使用的字符集,对应的是客户端的字符集,tion对应的是连接层的字符集,s对应的是查询结果的字符集 。数据库的字符集决定了数据表的默认字符集,数据表的字符集决定了字段的默认字符集 。,tion,s这三个变量的值在一般情况下是相同的,具体值是由客户端的编码决定的,进而使客户端的输入字符和输出的查询结果不会出现乱码情况 。
3 , 字符集变量的设置更改
set 变量名 = 值;
操作实例:
set character_set_client = gbk;set character_set_connecction = gbk;set character_set_results = gbk;
4,注意事项说明:
上述3个变量的更改在MySQL中还可以使用set names 字符集; 直接进行修改 , 即set names gbk; 。使用set或set names修改字符集只对当前会话有效,不会对其它的会话产生影响 , 且会话结束后,下次的会话仍然使用默认值 。tion,se,对应的校对集分别通过变量, , 来指定 。若字段使用utf8字符集,而客户端使用gbk字符集 。MySQL会自动进行编码转换 。由于utf8和gbk这两种字符集本质上是不同的,虽然常见字符可以转换成功 , 但遇到其中一个字符集中没有对应的特殊字符,则就会出现转换失败,进而导致乱码的情况 。2.2 , 数据库
数据库的字符集和校对集既可以在创建数据库时指定,也可以在创建完数据库后通过 ALTER命令进行修改 。
1,创建数据库时设定字符集和校对集
#既未指定字符集 , 又未指定校对集CREATE DATABASE 库名称;#仅指定字符集,未指定校对集CREATE DATABASE 库名称 CHARACTER SET [=] charset_name;#仅指定校对集,未指定字符集CREATE DATABASE 库名称 COLLATE [=] collation_name;#既指定字符集,又指定校对集CREATE DATABASE 库名称 CHARACTER SET [=] charset_name COLLATE [=] collation_name;
知识点:
SET用于指定字符集,用于指定校对集 。
字符集和校对集的设定规则:
为了避免受到默认值的影响,推荐在创建数据库时指定字符集和校对集 。
操作实例:
创建数据库,指定字符集为utf8,使用默认校对集的示例语句:
create database mydb_1 character set utf8;
2,修改数据库的字符集和校对集
如果您在创建完数据库后想进行修改它的字符集或校对集,可以使用 ALTER语句 。
#对数据库的字符集单独进行修改ALTER DATABASE 库名称 CHARACTER SET [=] charset_name;#对数据库的校对集单独进行修改ALTER DATABASE 库名称 COLLATE [=] collation_name;#对数据库的字符集和校对集进行修改ALTER DATABASE 库名称 CHARACTER SET [=] charset_name COLLATE [=] collation_name;
操作实例:
将 数据库的字符集修改为,校对规则修改为的示例语句:
ALTER DATABASE mydb_1 CHARACTER SET latin1 COLLATE latin1_general_ci;
需要注意的是,如果数据库里已经存在数据表,修改字符集后 , 已有的数据表不会按照新的字符集重新存放,所以不能通过修改数据库的字符集来修改数据表的内容 。
3 , 查看数据库的字符集和校对集
#第一步:进入操作库use 库名称;#第二步:查看操作库的创建信息SHOW CREATE DATABASE 库名称 \G;
2.3,数据表
数据表的字符集和校对集在创建表的时候指定 , 也可以在创建完表后通过 ALTER TABLE 命令进行修改 。
1 , 创建数据表时设定字符集和校对集
#既未指定字符集,又未指定校对集CREATE TABLE 表名称 (字段名 字段类型...);#仅指定字符集,未指定校对集CREATE TABLE 表名称 (字段名 字段类型...) CHARACTER SET [=] charset_name;#仅指定校对集,未指定字符集CREATE TABLE 表名称 (字段名 字段类型...) COLLATE [=] collation_name;#既指定字符集,又指定校对集CREATE TABLE 表名称 (字段名 字段类型...) CHARACTER SET [=] charset_name COLLATE [=] collation_name;
知识点:
SET可简写为 。
设置表的字符集及校对集和设置数据库字符集的规则基本类似:
为了避免受到默认值的影响 , 推荐在创建数据表时指定字符集和校对集 。
操作实例:
在数据库中创建数据表demo1,指定字符集为utf8 , 使用默认校对集的示例语句:
create table demo1(id int,name varchar(15))character set utf8;
2,修改数据表的字符集和校对集
如果您在创建完数据库后想进行修改它的字符集或校对集 , 可以使用 ALTER语句 。
#对数据库的字符集单独进行修改ALTER TABLE 表名称 CHARACTER SET [=] charset_name;#对数据库的校对集单独进行修改ALTER TABLE 表名称 COLLATE [=] collation_name;#对数据库的字符集和校对集进行修改ALTER TABLE 表名称 CHARACTER SET [=] charset_name COLLATE [=] collation_name;
操作实例:
将数据表demo1的字符集修改为,校对集修改为的示例语句:
alter table demo1 character set latin1 collate latin1_general_ci;
3 , 查看数据表的字符集和校对集
SHOW CREATE TABLE 表名称 \G;
2.4,字段
字段的字符集和校对集在创建表的时候指定,也可以在创建完表后通过 ALTER TABLE 命令进行修改
1,创建字段时设定字符集和校对集
#既未指定字符集,又未指定校对集CREATE TABLE 表名称 (字段名1 字段类型 ...);#仅指定字符集 , 未指定校对集CREATE TABLE 表名称 (字段名1 字段类型 CHARACTER SET [=] charset_name, ...);#仅指定校对集,未指定字符集CREATE TABLE 表名称 (字段名1 字段类型 COLLATE [=] collation_name, ...);#既指定字符集,又指定校对集CREATE TABLE 表名称 (字段名1 字段类型 CHARACTER SET [=] charset_name COLLATE [=] collation_name, ...);
操作实例:
在数据库中创建数据表demo2 , 指定字段name的字符集为utf8,使用默认校对集的示例语句:
【【MySQL基础】字符集与校对集详解】create table demo2(name varchar(15) character set utf8);
2,修改数据库的字符集和校对集
如果您在创建完数据库后想进行修改它的字符集或校对集 , 可以使用 ALTER语句,语法格式如下:
ALTER TABLE 表名称 MODIFY 字段名 数据类型 [CHARACTER SET charset_name][COLLATE collation_name];
操作实例:
将数据表demo2里的name字段的字符集修改为utf8,使用默认校对集 的示例语句:
alter table demo2 modify name varchar(15) character set utf8;
注意:如果在创建字段的时候没有特别指定字符集和校对规则,默认使用数据表的字符集和校对规则 。
3,查看数据表的字符集和校对集
SHOW CREATE TABLE 表名称 \G;
操作实例:
结语
这就是本期博客的全部内容啦,想必大家已经对MySQL中的字符集和校对集的相关知识有了全新地认识和理解吧,如果有什么其他的问题无法自己解决,可以在评论区留言哦!
最后,如果你觉得这篇文章写的还不错的话或者有所收获的话 , 麻烦小伙伴们动动你们的小手 , 给个三连呗(点赞,评论?,收藏),多多支持一下!各位的支持是我最大的动力 , 后期不断更新优质的内容来帮助大家,一起进步 。那我们下期见!