当前位置: 首页 > news >正文

MySQL 字符集

目录

字符集的基本概念

常见MySQL字符集

ascii(单字节字符集)

latin1(单字节字符集)

utf8(多字节字符集)

utf8mb4(多字节字符集)

MySQL默认字符集

MySQL字符集的层次级别

服务器级别

数据库级别

表级别

列级别

连接字符集


       字符集是计算机科学中的一个重要概念,用于定义文本中可以使用的字符集合。而 MySQL 字符集则是 MySQL 数据库管理系统中用于存储和处理文本数据的字符集。  

字符集的基本概念

  • 字符集:是一组字符的集合,每个字符都有唯一的编码。字符集可以是单字节的(如 ASCII)或多字节的(如 UTF-8)。

  • 编码方式:字符集的实现方式,决定了字符在存储时占用的字节数。例如,UTF-8 是一种可变长度的编码方式。

常见MySQL字符集

  • ascii(单字节字符集)

        仅支持基本的英文字符,编码为单字节。

  • latin1(单字节字符集)

       ISO-8859-1字符集,适用于西欧语言,编码为单字节。

  • utf8(多字节字符集)

       支持大部分Unicode字符,适合大多数语言,通常用于中文、日文、韩文等,但不支持表情符号。

       MySQL中的utf8utf8mb3的别名,使用1~3个字节表示字符,应优先使用utf8mb4。

  • utf8mb4(多字节字符集)

       可以存储所有Unicode字符,包括表情符号。

       变长编码方式,编码一个字符需要使用1~4个字节,使用1~4个字节表示字符。  

MySQL默认字符集

       在 MySQL5.7 中,默认字符集是 latin1 ;在 MySQL8.0 中,默认字符集是 utf8mb4。

MySQL字符集的层次级别

       字符集的层次级别,它们是和存储相关的。

       MySQL 中的字符集有以下的层次级别:

  • server(MySQL 实例级别/服务器级别)
  • database(数据库级别)
  • table(表级别)
  • column(字段级别/列级别)

       它们的优先级可以简单的认为是从上往下依次增大,也即 column 的优先级会大于 table 等其余层次的。如指定 MySQL 实例级别字符集是utf8mb4,指定某个表字符集是latin1,那么这个表的所有字段如果不指定的话,编码就是latin1。

服务器级别

    character_set_server 表示服务器级别的字符集。

        不同版本的 MySQL 其 server 级别的字符集默认值不同,在 MySQL5.7 中,其默认值是 latin1 ;在 MySQL8.0 中,其默认值是 utf8mb4 。此外,你也可以在运行时改变 character_set_server 的值,从而达到修改 server 级别的字符集的目的。

        server 级别的字符集是 MySQL 服务器的全局设置。

数据库级别

        character_set_database 表示当前数据库的字符集。

        database 级别的字符集是我们在创建数据库和修改数据库时指定的。

        如果没有指定,则变量与相应的服务器级系统变量具有相同的值。

表级别

    table 级别的字符集是在创建表和修改表时指定的。

         如果在创建表和修改表时未指定字符集,那么将会使用 database 级别的字符集。

列级别

    column 级别的字符集同样是在创建表和修改表时指定的,只不过它是定义在列中。

         如果未指定列级别的字符集,那么将会使用表级别的字符集。

连接字符集

         连接字符集涉及的是和 MySQL 服务器的通信。

         连接字符集与下面这几个变量息息相关:

  • character_set_client 

        描述了客户端发送给服务器的 SQL 语句使用的是什么字符集。

        服务器解码请求时使用的字符集。

  • character_set_connection 

        描述了服务器接收到 SQL 语句时使用什么字符集进行翻译。

        服务器处理请求时会把请求字符串从 character_set_client 转为character_set_connection。

  • character_set_results 

       描述了服务器返回给客户端的结果使用的是什么字符集。

       服务器向客户端返回数据时使用的字符集。

从请求到响应字符集转变过程:

      客户端使用操作系统的字符集编码请求字符串,向服务器发送的是经过编码的一个字节串。
      服务器将客户端发送来的字节串采用 character_set_client 代表的字符集进行解码,将解码后的字符串再按照 character_set_connection 代表的字符集进行编码

       将从某个列获取到的字节串从该列使用的字符集转换为 character_set_results 代表的字符集后发送到客户端。客户端使用操作系统的字符集解析收到的结果集字节串。

一般情况下要使用保持这三个变量的值和客户端使用的字符集相同。

相关文章:

  • 华为昇腾AscendCL推理引擎入门
  • epoll原理以及系统调用案例分析
  • 动态规划——完全背包问题
  • 【中文翻译】第8章-The Algorithmic Foundations of Differential Privacy
  • [spring] Spring JPA - Hibernate 多表联查 3
  • 人形机器人科普
  • Unity Shader 的编程流程和结构
  • 现代前端质量保障与效能提升实战指南
  • Noteexpress插入参考文献无法对齐
  • Linux生产者消费者模型
  • 快速求出质数
  • 【算法训练】单向链表
  • pandas中新增的case_when()方法
  • c++ 命名空间 namespace
  • 【 <二> 丹方改良:Spring 时代的 JavaWeb】之 Spring Boot 中的数据验证:使用 Hibernate Validator
  • 数据建模流程: 概念模型>>逻辑模型>>物理模型
  • NSSCTF(MISC)——[NSSRound#4 SWPU]Type Message
  • 网络爬虫-2:基础与理论
  • 论文阅读笔记:Denoising Diffusion Probabilistic Models (3)
  • C语言中*a与a的区别和联系
  • 辽宁辽阳市白塔区一饭店发生火灾,事故已造成22人遇难3人受伤
  • 日趋活跃!2024年我国数据生产总量同比增长25%
  • 民调显示特朗普执政百日支持率为80年来美历任总统最低
  • 三大交易所修订股票上市规则:明确关键少数责任,强化中小股东保障
  • 天问三号开放20千克质量资源,邀国际合作开展火星探测研究
  • 世界最大全电驱可拆装环保绞吸船投入官厅水库清淤试点工程