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

锦通  金牌会员 | 2024-7-18 14:53:41 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 980|帖子 980|积分 2940

序号系列文章1【MySQL基础】MySQL介绍及安装2【MySQL基础】MySQL根本操作详解3【MySQL基础】MySQL根本数据类型4【MySQL基础】MySQL表的七约莫束

  

媒介

   各人好,我是小杨!本日我将具体的为各人介绍MySQL中的字符集与校对集的相干知识,希望各人能够从中收获多多!
  
字符集与校对集

1,字符集与校对集的概述

1.1,字符集

1,字符集的含义
   字符指计算机中保存的各种文字和符号,包罗各种国家的文字、标点符号、图形、符号、数字等。
  由于计算机采用的是二进制保存数据,用户输入的字符将会按照一定的规则转化为二进制后保存,这个过程就是字符编码。
  将一系列的字符的编码规则组合起来,就形成了字符集,用于表示特定的文本信息。
  2,常见的字符集
在计算机的发展汗青中,出现了许多的字符集,MySQL也提供了各种各样的字符集的支持。
常用的字符集有以下几种:
字符集单字符最大长度支持的语言latinl1字节西欧字符,希腊字符等gbk2字节简体和繁体中文,日文,韩文等utf83字节世界上大部分国家的文字utf8mb44字节支持险些全部的语言 留意事项:

  • 单字符占用的存储空间越多,所支持的语言种类就越多。
  • 表中的字符集均向下兼容ASCII(美国信息交换标准代码),假如输入的字符在ASCII的范围内,则编码结果是相同的。
  • MySQL中的utf8编码和标准的UTF-8之间存在差别,标准的UTF-8中的一个字符最多占用4个字节,而utf8的最多占用3个字节。
  • utf8的单字符占用最大字节数少于UTF-8的,进而导致出现UTF-8中的一些特殊字符(心情)在MySQL的utf8编码中无法利用的情况
  • utf8mb4编码的引进解决了上述标题,utf8mb4表示 Unicode 的全部字符,包罗心情符号和一些较少利用的字符。

3,查看MySQL中的字符集
MySQL中提供了挺多的字符集的支持,查看MySQL中可用字符集根本语法如下:
  1. SHOW CHARACTER SET;
复制代码
操作结果如下:

操作结果分析:
   Charset:字符集名称
  Description:形貌信息
  Default collation:默认校对集
  Maxlen:单字符的最大长度
  
1.2,校对集

1,校对集的含义
   校对集是数据比较的规则,用于为不同的字符集指定比较和排序规则。
  校对集依靠字符集,每个字符集有多种校对规则。
  
2,校对集名称的构成
   latinl字符集对应的校对集为latinl_swedish_ci
  

  • 校对集的名称由_分隔的三部分构成的。
  • 开头的latinl表示对应的字符集。
  • 中间的swedish表示国家名或者利用general。
  • 结尾的是ci,cs或bin,ci表示不区分大小写,cs表示区分大小写,bin表示以二进制的方式比较。
  
3,校对集的查看
MySQL也提供了许多的字符集,查看MySQL中可用校对集根本语法如下:
  1. SHOW COLLATION;
复制代码
操作结果如下:

操作结果分析:
   Collatioin:校对集名称
  Charset:对应的字符集
  Id:校对集ID
  default:是否为对应字符集的默认校对集
  Compiled:是否已编译
  Sortlen:排序的内存需求量
  
2,字符集和校对集的设置

MySQL 的字符集和校对规则有 4 个级别的默认设置,即服务器级、数据库级、表级和字段级。
它们分别在不同的地方设置,作用也不相同。
2.1,MySQL环境

1,当前会话利用的字符集查看
  1. SHOW VARIABLES LIKE 'CHARACTER%';
复制代码
操作结果如下:

操作结果分析:

  • 上述结果是显示当前会话利用的字符集,在不同的客户端环境中的输出结果可能不相同。
  • 不同的客户端可以指定不同的字符集环境设置,服务器会按照不同的字符集环境设置举行处理。
  • 会话是指从客户端登录服务器,直到退出服务器的整个过程,可以依次打开多个客户端举行操作,进而产生不同的会话。
  • 假如没有指定服务器字符集,MySQL 会默认利用 latin1 作为服务器字符集。假如只指定了字符集,没有指定校对规则,MySQL 会利用该字符集对应的默认校对规则。假如要利用字符集的非默认校对规则,需要在指定字符集的同时指定校对规则。

2,MySQL环境与字符集相干的变量
变量名含义character_set_client客户端字符集character_set_connection客户端与服务器连接利用的字符集character_set_database默认数据库利用的字符集character_set_filesystem文件体系字符集character_set_results将查询结果()返回给客户端的字符集character_set_server服务器默认字符集character_set_system服务器用来存储标识符的字符集character_sets_dir安装字符集的目录 留意事项分析:

  • character_set_client,character_set_connection,character_set_results,character_set_server这4个变量是重点,需特殊留意。
  • character_set_server决定了新创建的数据表默认利用的字符集,character_set_client对应的是客户端的字符集,character_set_connection对应的是连接层的字符集,character_set_results对应的是查询结果的字符集。
  • 数据库的字符集决定了数据表的默认字符集,数据表的字符集决定了字段的默认字符集。
  • character_set_client,character_set_connection,character_set_results这三个变量的值在一般情况下是相同的,具体值是由客户端的编码决定的,进而使客户端的输入字符和输出的查询结果不会出现乱码情况。

3,字符集变量的设置更改
  1. set 变量名 = 值;
复制代码
操作实例:
  1. set character_set_client = gbk;
  2. set character_set_connecction = gbk;
  3. set character_set_results = gbk;
复制代码

4,留意事项分析:

  • 上述3个变量的更改在MySQL中还可以利用set names 字符集; 直接举行修改,即set names gbk;。
  • 利用set或set names修改字符集只对当前会话有效,不会对别的的会话产生影响,且会话结束后,下次的会话仍然利用默认值。
  • character_set_connection,character_set_database,character_set_server对应的校对集分别通过变量collation_connection,collation_database,collation_server来指定。
  • 若字段利用utf8字符集,而客户端利用gbk字符集。MySQL会自动举行编码转换。
  • 由于utf8和gbk这两种字符集本质上是不同的,固然常见字符可以转换成功,但遇到其中一个字符会合没有对应的特殊字符,则就会出现转换失败,进而导致乱码的情况。

2.2,数据库

   数据库的字符集和校对集既可以在创建数据库时指定,也可以在创建完数据库后通过 ALTER DATABASE 命令举行修改。
  1,创建数据库时设定字符集和校对集
  1. #既未指定字符集,又未指定校对集
  2. CREATE DATABASE 库名称;
  3. #仅指定字符集,未指定校对集
  4. CREATE DATABASE 库名称 CHARACTER SET [=] charset_name;
  5. #仅指定校对集,未指定字符集
  6. CREATE DATABASE 库名称 COLLATE [=] collation_name;
  7. #既指定字符集,又指定校对集
  8. CREATE DATABASE 库名称 CHARACTER SET [=] charset_name COLLATE [=] collation_name;
复制代码
知识点:

  • CHARACTER SET用于指定字符集,COLLATE用于指定校对集。
  • 字符集和校对集的设定规则:

    • 若指定字符集,又指定校对集,表示数据库利用指定的字符集和校对集。
    • 若仅指定字符集,未指定校对集,表示数据库利用该字符集的默认校对集。
    • 若仅指定校对集,未指定字符集,表示数据库利用该校对集对应的字符集。
    • 若未指定字符集,又未指定校对集,表示数据库利用服务器字符集和校对集作为数据库的字符集和校对规则。

  • 为了避免受到默认值的影响,保举在创建数据库时指定字符集和校对集。

操作实例:
创建数据库mydb_1,指定字符集为utf8,利用默认校对集utf8_genral_ci的示例语句:
  1. create database mydb_1 character set utf8;
复制代码


2,修改数据库的字符集和校对集
假如您在创建完数据库后想举行修改它的字符集或校对集,可以利用 ALTER DATABASE 语句。
  1. #对数据库的字符集单独进行修改
  2. ALTER DATABASE 库名称 CHARACTER SET [=] charset_name;
  3. #对数据库的校对集单独进行修改
  4. ALTER DATABASE 库名称 COLLATE [=] collation_name;
  5. #对数据库的字符集和校对集进行修改
  6. ALTER DATABASE 库名称 CHARACTER SET [=] charset_name COLLATE [=] collation_name;
复制代码
操作实例:
将 mydb_1数据库的字符集修改为 latin1,校对规则修改为 latin1_general_ci 的示例语句:
  1. ALTER DATABASE mydb_1 CHARACTER SET latin1 COLLATE latin1_general_ci;
复制代码

需要留意的是,假如数据库里已经存在数据表,修改字符集后,已有的数据表不会按照新的字符集重新存放,以是不能通过修改数据库的字符集来修改数据表的内容。

3,查看数据库的字符集和校对集
  1. #第一步:进入操作库
  2. use 库名称;
  3. #第二步:查看操作库的创建信息
  4. SHOW CREATE DATABASE 库名称 \G;
复制代码


2.3,数据表

   数据表的字符集和校对集在创建表的时候指定,也可以在创建完表后通过 ALTER TABLE 命令举行修改。
  1,创建数据表时设定字符集和校对集
  1. #既未指定字符集,又未指定校对集
  2. CREATE TABLE 表名称 (字段名 字段类型...);
  3. #仅指定字符集,未指定校对集
  4. CREATE TABLE 表名称 (字段名 字段类型...) CHARACTER SET [=] charset_name;
  5. #仅指定校对集,未指定字符集
  6. CREATE TABLE 表名称 (字段名 字段类型...) COLLATE [=] collation_name;
  7. #既指定字符集,又指定校对集
  8. CREATE TABLE 表名称 (字段名 字段类型...) CHARACTER SET [=] charset_name COLLATE [=] collation_name;
复制代码
知识点:

  • CHARACTER SET可简写为CHARSET。
  • 设置表的字符集及校对集和设置数据库字符集的规则根本雷同:

    • 若指定字符集,又指定校对集,表示数据表利用指定的字符集和校对集。
    • 若仅指定字符集,未指定校对集,表示数据表利用该字符集的默认校对集。
    • 若仅指定校对集,未指定字符集,表示数据表利用该校对集对应的字符集。
    • 若未指定字符集,又未指定校对集,表示数据表利用数据库字符集和校对集作为数据表的字符集和校对规则。

  • 为了避免受到默认值的影响,保举在创建数据表时指定字符集和校对集。
操作实例:
在数据库mydb_1中创建数据表demo1,指定字符集为utf8,利用默认校对集utf8_genral_ci的示例语句:
  1. create table demo1(
  2. id int,
  3. name varchar(15)
  4. )character set utf8;
复制代码


2,修改数据表的字符集和校对集
假如您在创建完数据库后想举行修改它的字符集或校对集,可以利用 ALTER tables 语句。
  1. #对数据库的字符集单独进行修改
  2. ALTER TABLE 表名称 CHARACTER SET [=] charset_name;
  3. #对数据库的校对集单独进行修改
  4. ALTER TABLE 表名称 COLLATE [=] collation_name;
  5. #对数据库的字符集和校对集进行修改
  6. ALTER TABLE 表名称 CHARACTER SET [=] charset_name COLLATE [=] collation_name;
复制代码
操作实例:
将数据表demo1的字符集修改为 latin1,校对集修改为 latin1_general_ci 的示例语句:
  1. alter table demo1 character set latin1 collate latin1_general_ci;
复制代码


3,查看数据表的字符集和校对集
  1. SHOW CREATE TABLE 表名称 \G;
复制代码


2.4,字段

   字段的字符集和校对集在创建表的时候指定,也可以在创建完表后通过 ALTER TABLE 命令举行修改
  1,创建字段时设定字符集和校对集
  1. #既未指定字符集,又未指定校对集
  2. CREATE TABLE 表名称 (字段名1 字段类型 ...);
  3. #仅指定字符集,未指定校对集
  4. CREATE TABLE 表名称 (字段名1 字段类型 CHARACTER SET [=] charset_name, ...);
  5. #仅指定校对集,未指定字符集
  6. CREATE TABLE 表名称 (字段名1 字段类型 COLLATE [=] collation_name, ...);
  7. #既指定字符集,又指定校对集
  8. CREATE TABLE 表名称 (字段名1 字段类型 CHARACTER SET [=] charset_name COLLATE [=] collation_name, ...);
复制代码
操作实例:
在数据库mydb_1中创建数据表demo2,指定字段name的字符集为utf8,利用默认校对集utf8_genral_ci的示例语句:
  1. create table demo2(
  2. name varchar(15) character set utf8);
复制代码


2,修改数据库的字符集和校对集
假如您在创建完数据库后想举行修改它的字符集或校对集,可以利用 ALTER DATABASE 语句,语法格式如下:
  1. ALTER TABLE 表名称 MODIFY 字段名 数据类型 [CHARACTER SET charset_name][COLLATE collation_name];
复制代码
操作实例:
将数据表demo2里的name字段的字符集修改为utf8,利用默认校对集utf8_genral_ci 的示例语句:
  1. alter table demo2 modify name varchar(15) character set utf8;
复制代码

留意:假如在创建字段的时候没有特殊指定字符集和校对规则,默认利用数据表的字符集和校对规则。

3,查看数据表的字符集和校对集
  1. SHOW CREATE TABLE 表名称 \G;
复制代码
操作实例:


结语

这就是本期博客的全部内容啦,想必各人已经对MySQL中的字符集和校对集的相干知识有了全新地认识和理解吧,假如有什么其他的标题无法自己解决,可以在评论区留言哦!
最后,假如你以为这篇文章写的还不错的话或者有所收获的话,麻烦小伙伴们动动你们的小手,给个三连呗(点赞

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

锦通

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表