iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >【MySQL基础】字符集与校对集详解
  • 538
分享到

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

mysql数据库服务器 2023-08-18 15:08:22 538人浏览 泡泡鱼
摘要

序号系列文章1【MySQL基础】MySQL介绍及安装2【MySQL基础】MySQL基本操作详解3【MySQL基础】MySQL基本数据类型4【MySQL基础】MySQL表的七大约束 文章目录 前言字符集与校对集1,字符集与校对集的概

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


前言

大家好,我是小杨!今天我将详细的为大家介绍MySQL中的字符集与校对集的相关知识,希望大家能够从中收获多多!


字符集与校对集

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

1.1,字符集

1,字符集的含义

字符指计算机中保存的各种文字和符号,包括各种国家的文字、标点符号、图形、符号、数字等。

由于计算机采用的是二进制保存数据,用户输入的字符将会按照一定的规则转化为二进制后保存,这个过程就是字符编码。

将一系列的字符的编码规则组合起来,就形成了字符集,用于表示特定的文本信息。

2,常见的字符集

在计算机的发展历史中,出现了许多的字符集,Mysql也提供了各种各样的字符集的支持。

常用的字符集有以下几种:

字符集单字符最大长度支持的语言
latinl1字节西欧字符,希腊字符等
gbk2字节简体和繁体中文,日文,韩文等
utf83字节世界上大部分国家的文字
utf8mb44字节支持几乎所有的语言

注意事项:

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

3,查看MySQL中的字符集

MySQL中提供了挺多的字符集的支持,查看MySQL中可用字符集基本语法如下:

SHOW CHARACTER SET;

操作结果如下:

image-20230106222957102

操作结果分析:

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中可用校对集基本语法如下:

SHOW COLLATION;

操作结果如下:

image-20230106223159803

操作结果分析:

Collatioin:校对集名称

Charset:对应的字符集

Id:校对集ID

default:是否为对应字符集的默认校对集

Compiled:是否已编译

Sortlen:排序的内存需求量


2,字符集和校对集的设置

MySQL 的字符集和校对规则有 4 个级别的默认设置,即服务器级、数据库级、表级和字段级。

它们分别在不同的地方设置,作用也不相同。

2.1,MySQL环境

1,当前会话使用的字符集查看

SHOW VARIABLES LIKE 'CHARACTER%';

操作结果如下:

image-20230106223410098

操作结果说明:

  1. 上述结果是显示当前会话使用的字符集,在不同的客户端环境中的输出结果可能不相同。
  2. 不同的客户端可以指定不同的字符集环境配置,服务器会按照不同的字符集环境配置进行处理。
  3. 会话是指从客户端登录服务器,直到退出服务器的整个过程,可以依次打开多个客户端进行操作,进而产生不同的会话。
  4. 如果没有指定服务器字符集,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安装字符集的目录

注意事项说明:

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

3,字符集变量的设置更改

set 变量名 = 值;

操作实例:

set character_set_client = gbk;set character_set_connecction = gbk;set character_set_results = gbk;

4,注意事项说明:

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

2.2,数据库

数据库的字符集和校对集既可以在创建数据库时指定,也可以在创建完数据库后通过 ALTER DATABASE 命令进行修改。

1,创建数据库时设定字符集和校对集

#既未指定字符集,又未指定校对集CREATE DATABASE 库名称;#仅指定字符集,未指定校对集CREATE DATABASE 库名称 CHARACTER SET [=] charset_name;#仅指定校对集,未指定字符集CREATE DATABASE 库名称 COLLATE [=] collation_name;#既指定字符集,又指定校对集CREATE DATABASE 库名称 CHARACTER SET [=] charset_name COLLATE [=] collation_name;

知识点:

  1. CHARACTER SET用于指定字符集,COLLATE用于指定校对集。

  2. 字符集和校对集的设定规则:

    • 若指定字符集,又指定校对集,表示数据库使用指定的字符集和校对集。

    • 若仅指定字符集,未指定校对集,表示数据库使用该字符集的默认校对集。

    • 若仅指定校对集,未指定字符集,表示数据库使用该校对集对应的字符集。

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

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


操作实例:

创建数据库mydb_1,指定字符集为utf8,使用默认校对集utf8_genral_ci的示例语句:

create database mydb_1 character set utf8;

image-20230107230126954


2,修改数据库的字符集和校对集

如果您在创建完数据库后想进行修改它的字符集或校对集,可以使用 ALTER DATABASE 语句。

#对数据库的字符集单独进行修改ALTER DATABASE 库名称 CHARACTER SET [=] charset_name;#对数据库的校对集单独进行修改ALTER DATABASE 库名称 COLLATE [=] collation_name;#对数据库的字符集和校对集进行修改ALTER DATABASE 库名称 CHARACTER SET [=] charset_name COLLATE [=] collation_name;

操作实例:

将 mydb_1数据库的字符集修改为 latin1,校对规则修改为 latin1_general_ci 的示例语句:

ALTER DATABASE mydb_1 CHARACTER SET latin1 COLLATE latin1_general_ci;

image-20230107230739198

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


3,查看数据库的字符集和校对集

#第一步:进入操作库use 库名称;#第二步:查看操作库的创建信息SHOW CREATE DATABASE 库名称 \G;

image-20230107224436689


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;

知识点:

  1. CHARACTER SET可简写为CHARSET。

  2. 设置表的字符集及校对集和设置数据库字符集的规则基本类似:

    • 若指定字符集,又指定校对集,表示数据表使用指定的字符集和校对集。

    • 若仅指定字符集,未指定校对集,表示数据表使用该字符集的默认校对集。

    • 若仅指定校对集,未指定字符集,表示数据表使用该校对集对应的字符集。

    • 若未指定字符集,又未指定校对集,表示数据表使用数据库字符集和校对集作为数据表的字符集和校对规则。

  3. 为了避免受到默认值的影响,推荐在创建数据表时指定字符集和校对集。

操作实例:

在数据库mydb_1中创建数据表demo1,指定字符集为utf8,使用默认校对集utf8_genral_ci的示例语句:

create table demo1(id int,name varchar(15))character set utf8;

image-20230107231446838


2,修改数据表的字符集和校对集

如果您在创建完数据库后想进行修改它的字符集或校对集,可以使用 ALTER tables 语句。

#对数据库的字符集单独进行修改ALTER TABLE 表名称 CHARACTER SET [=] charset_name;#对数据库的校对集单独进行修改ALTER TABLE 表名称 COLLATE [=] collation_name;#对数据库的字符集和校对集进行修改ALTER TABLE 表名称 CHARACTER SET [=] charset_name COLLATE [=] collation_name;

操作实例:

将数据表demo1的字符集修改为 latin1,校对集修改为 latin1_general_ci 的示例语句:

alter table demo1 character set latin1 collate latin1_general_ci;

image-20230108000037988


3,查看数据表的字符集和校对集

SHOW CREATE TABLE 表名称 \G;

image-20230107232322511


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, ...);

操作实例:

在数据库mydb_1中创建数据表demo2,指定字段name的字符集为utf8,使用默认校对集utf8_genral_ci的示例语句:

create table demo2(name varchar(15) character set utf8);

image-20230107233240988


2,修改数据库的字符集和校对集

如果您在创建完数据库后想进行修改它的字符集或校对集,可以使用 ALTER DATABASE 语句,语法格式如下:

ALTER TABLE 表名称 MODIFY 字段名 数据类型 [CHARACTER SET charset_name][COLLATE collation_name];

操作实例:

将数据表demo2里的name字段的字符集修改为utf8,使用默认校对集utf8_genral_ci 的示例语句:

alter table demo2 modify name varchar(15) character set utf8;

image-20230107235539619

注意:如果在创建字段的时候没有特别指定字符集和校对规则,默认使用数据表的字符集和校对规则。


3,查看数据表的字符集和校对集

SHOW CREATE TABLE 表名称 \G;

操作实例:

image-20230107234126750


结语

这就是本期博客的全部内容啦,想必大家已经对MySQL中的字符集和校对集的相关知识有了全新地认识和理解吧,如果有什么其他的问题无法自己解决,可以在评论区留言哦!

最后,如果你觉得这篇文章写的还不错的话或者有所收获的话,麻烦小伙伴们动动你们的小手,给个三连呗(点赞👍,评论✍,收藏📖),多多支持一下!各位的支持是我最大的动力,后期不断更新优质的内容来帮助大家,一起进步。那我们下期见!
在这里插入图片描述


来源地址:https://blog.csdn.net/m0_64338546/article/details/128438498

您可能感兴趣的文档:

--结束END--

本文标题: 【MySQL基础】字符集与校对集详解

本文链接: https://www.lsjlt.com/news/374309.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 【MySQL基础】字符集与校对集详解
    序号系列文章1【MySQL基础】MySQL介绍及安装2【MySQL基础】MySQL基本操作详解3【MySQL基础】MySQL基本数据类型4【MySQL基础】MySQL表的七大约束 文章目录 前言字符集与校对集1,字符集与校对集的概...
    99+
    2023-08-18
    mysql 数据库 服务器
  • MySQL字符集与校对规则怎么应用
    MySQL字符集和校对规则是用来确定字符串数据的存储方式和比较规则的设置。在MySQL中,可以在数据库、表、列级别设置字符集和校对规...
    99+
    2024-04-09
    MySQL
  • mysql字符集校对规则有哪些
    这篇文章给大家介绍mysql字符集校对规则有哪些,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。目前mysql默认的校对规则除binary charset为binary外,都为ci,即大...
    99+
    2024-04-02
  • MySQL字符集和校对规则是什么
    本篇内容介绍了“MySQL字符集和校对规则是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!查看所有可用...
    99+
    2024-04-02
  • MySQL基础学习之字符集的应用
    目录字符集的查询与修改字符集比较规则utf8mb3和 utf8mb4比较规则后缀含义字符集常用SQL字符集的查询与修改 在mysql 8.0版本之前, 默认字符集是latin1, 使用默认字符集的时候输入中文会出现乱码问...
    99+
    2023-05-16
    MySQL字符集应用 MySQL字符集 MySQL基础
  • MySQL 字符集概念与原理及如何配置字符集 - 超详细图文详解
    目录 一、字符集概念 1、字符(Character) 2、字符编码 3、字符集(Character set) 二、字符集原理 1、ASCII字符集 2、GB2312 3、GBK 4、GB18030 5、BIG5 6、Unicode 编码 三...
    99+
    2023-10-10
    mysql 数据库
  • Python基础:字典(dict)与集合
    查找场景下与列表的性能对比    字典与集合之所以高效的原因是:内部结构都是一张哈希表。   平均情况下插入、查找和删除的时间复杂度为 O(1).   假设有数量100,000的产品列表: import time id = [x for...
    99+
    2023-01-31
    字典 基础 Python
  • MySQL字符集基本概念和详细设置
    基本概念   字符(Character)是指人类语言中最小的表义符号。例如’A'、’B'等;  给定一系列字符,对每个字符赋予一个数值,用数值来代表对应的字符,这一数值就是字符的编码(...
    99+
    2024-04-02
  • python基础之set集合详解
    一、set 集合 集合(set)是一个无序的不重复元素序列。 可以使用大括号 {} 或者 set() 函数创建集合,注意:创建一个空集合必须用 set() 而不是 { },因为 { ...
    99+
    2024-04-02
  • Java基础之集合Set详解
    目录一、概述二、Set的常用方法三、Set的遍历3.1增强for循环3.2 迭代器遍历一、概述 Set是Java中的集合类,提供了一种无顺序,不重复的集合。常用的子类包括HashSe...
    99+
    2024-04-02
  • python3基础之集合set详解
    目录集合set1.集合定义2.集合基础操作固定集合1.定义2.作用基础操作集合set 1.集合定义 1.由一系列不可重复的不可变类型变量组成的可变映射容器 2.相当于只有键没有值的字...
    99+
    2024-04-02
  • mysql字符集查看与设置
    MySQL的字符集问题主要是两个概念,一个是Character Sets,一个是Collations,前者是字符内容及编码,后者是对前者进行比较操作的一些规则。这两个参数集可以在数据库实例、单个数据库、表、...
    99+
    2024-04-02
  • MySQL 中字符集详细介绍
    目录MySQL 中的 UTF8修改MySQL数据库的编码字符集的比较规则MySQL查询时区分大小写MySQL 中的 UTF8 在 MySQL 中, utf8 编码格式有点特殊, 它不...
    99+
    2024-04-02
  • MySQL常见字符集对比分析
    作者:禅与计算机程序设计艺术 1.简介 随着互联网信息的不断增长,数据库系统也越来越复杂,需要更高的性能和可用性。为了提高数据库处理数据的效率和可靠性,越来越多的人开始选择MySQL作为其数据库管理...
    99+
    2023-10-25
    大数据 人工智能 语言模型 Java Python 架构设计
  • Java基础之集合框架详解
    目录一、前言二、集合的由来?三、集合和数组的区别?四、Collection集合的功能概述?五、Collection集合存储字符串并遍历?(迭代器)六、...
    99+
    2024-04-02
  • MySQL字符集错误怎么诊断与解决
    MySQL字符集错误通常是由于数据库和应用程序之间的字符集不匹配导致的。要诊断和解决这种错误,可以按照以下步骤进行操作: 确定数据...
    99+
    2024-04-02
  • JavaScript字典与集合详解
    目录字典什么是字典JavaScript中的字典字典的应用集合什么是集合JS中的集合集合中的操作交集、并集、差集的封装字典 什么是字典 说到字典,第一时间想到的应该就是新华字典,实际上...
    99+
    2024-04-02
  • python基础字符串str详解
    目录字符串str:编码:ord(字符串)和chr(整数):字符串字面值:字符串通用操作字符串str: 定义:是由一系列字符组成的不可变序列容器,储存的事字符的编码值 编码:...
    99+
    2024-04-02
  • MySQL解决字符集编码问题
    目录前言方法1:在创建数据库时,指定字符集方法2: 更改mysql的配置文件前言 MySQL的默认编码方式是 拉丁文,如果想要设置一些汉字的数据.可能会报错.分享一下我解决这个问题时的方法.1. 在创建数据库时,指定字符...
    99+
    2023-04-12
    MySQL解决字符集编码 字符集编码问题 MySQL字符集
  • python字符串基础操作详解
    目录字符串的赋值单引号字符串赋值给变量双引号字符串赋值给变量三引号字符串赋值给变量(多行)字符串的截取截取指定位置的字符获取指定位置之后的所有字符截取指定位置之前的所有字符获取所有的...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作