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

mysql的字符集和比较规则

mysql的字符集和比较规则

      • 一、字符集(Character Set)
      • 二、比较规则(Collation)
      • 三、客户端与服务器的字符集转换
      • 四、注意事项
      • 总结

深度解读mysql是怎样运行的

MySQL的字符集和比较规则是其处理字符串存储、传输及比较的核心机制:


一、字符集(Character Set)

  1. 定义
  • 字符集是字符与二进制数据的映射规则,用于编码(文字→二进制)和解码(二进制→文字)。
  • 常见字符集包括ASCII、GB2312、GBK、UTF-8等。MySQL中UTF-8分为utf8mb3(1-3字节)和utf8mb4(1-4字节),后者支持更广泛字符(如Emoji)。
  1. 级别设置MySQL支持四个级别的字符集配置:
  • 服务器级别:通过character_set_server和collation_server系统变量设置,默认值可能为latin1(旧版本)或utf8mb4(MySQL 8.0+)。
  • 数据库级别:创建或修改数据库时指定,例如:
    CREATE DATABASE db_name CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci;
    若未指定,则继承服务器设置。
  • 表级别:继承数据库设置,也可单独指定。
  • 列级别:同一表中不同列可设置不同字符集。
  1. 查看与修改
  • 查看当前字符集:
    SHOW VARIABLES LIKE ‘character_set_%’; – 查看所有字符集相关变量
    SHOW CHARACTER SET; – 查看支持的字符集
  • 修改字符集:
  • 配置文件:修改my.cnf或my.ini,设置character_set_server=utf8mb4。
  • 运行时修改:
    SET character_set_server = ‘utf8mb4’; – 修改服务器级别字符集

二、比较规则(Collation)

  1. 定义
  • 比较规则定义字符串的排序和比较方式,例如是否区分大小写、重音符号等。
  • 每个字符集有多个比较规则,默认规则通常以_ci(case-insensitive,不区分大小写)结尾,如utf8mb4_0900_ai_ci。
  1. 级别设置
  • 比较规则与字符集绑定,修改字符集时比较规则会自动调整为该字符集的默认值,反之亦然。例如:
    ALTER TABLE t MODIFY col VARCHAR(10) COLLATE utf8mb4_bin; – 修改列的排序规则
    此时字符集会同步调整为utf8mb4。
  1. 查看与修改
  • 查看比较规则:
    SHOW COLLATION; – 查看所有比较规则
    SHOW VARIABLES LIKE ‘collation_%’; – 查看当前比较规则设置

三、客户端与服务器的字符集转换

  1. 通信流程
  • 请求阶段:客户端使用character_set_client编码请求,服务器解码后转换为character_set_connection处理。
  • 响应阶段:服务器将结果按character_set_results编码返回,客户端解码显示。
  • 变量关联:
  • character_set_client:客户端请求的字符集。
  • character_set_connection:服务器处理时的中间字符集。
  • character_set_results:响应字符集。
  1. 乱码问题
  • 若客户端与服务器字符集不一致,可能导致乱码。需确保三者统一,例如:
    SET NAMES ‘utf8mb4’; – 同时设置client/connection/results的字符集

四、注意事项

  1. 兼容性问题
  • 修改字符集时需确保现有数据兼容新字符集,否则可能转换失败。例如:将包含中文字符的列从utf8mb4改为ascii会报错。
  • 推荐使用utf8mb4替代utf8mb3,以支持更全面的Unicode字符(如Emoji)。
  1. 默认值变化
  • MySQL 8.0+默认字符集为utf8mb4,而旧版本可能为latin1。

总结

MySQL通过多级别字符集和比较规则实现灵活的字符串管理。正确配置需注意客户端与服务器的一致性,优先使用utf8mb4以兼容现代应用需求,同时避免因字符集转换导致的数据错误。

示例:
假设表结构如下:
CREATE TABLE example (
id INT PRIMARY KEY,
name VARCHAR(20) CHARSET utf8mb4,
code CHAR(10) CHARSET latin1
) ROW_FORMAT=COMPACT;

  • 插入数据:id=1, name=‘张三’, code=‘A123’
  • 存储过程:
    1. 变长字段长度列表:
  • name字段实际长度:张三在utf8mb4中占6字节(0xE5BCA0 0xE4B889),长度值0x06。
  • code字段为latin1定长,不记录长度。
  • 变长字段列表逆序存储:[0x06]。
    1. 记录头信息:next_record指向下一条记录的偏移量(如0x0123)。
    2. 真实数据:
  • id=1(4字节)、name的6字节数据、code的10字节数据(定长,不足部分填充空格)。
    3. 解码:按utf8mb4解码name字段,按latin1解码code字段。

相关文章:

mysql的字符集和比较规则

mysql的字符集和比较规则 一、字符集(Character Set)二、比较规则(Collation)三、客户端与服务器的字符集转换四、注意事项总结 深度解读mysql是怎样运行的 MySQL的字符集和比较规则是其处理字符串存储、传输及比较的核心机制&…...

Vue3 + Vite + TS,使用 配置项目别名属性:server

官网地址传送门 点哇点哇,vite 官网传送门 直接上马 server: {https: false, // 是否开启 httpsopen: true, // 是否自动在浏览器中打开port: 8001, // 端口号host: "0.0.0.0",// 跨域代理proxy: {/api: {target: "http://localhost:3000", …...

03_pyqt5 + vlc 实现视频播放器

1.功能需求如图 按钮: 播放/暂停, 前进/后退, 视频上一个/下一个, 打开视频进度条: 视频进度条显示, 进度条拖拽, 音量控制按键控制: 1,2,3,4缩放画面大小, 2.方案选择 开发语言: python UI界面: pyqt5 qt_designed 设计ui布局 视频编码: python-vlc 方案说明: 视频解码可…...

Grafana使用日志5--如何重置Grafana密码

背景 有时候当账号太多的时候,根本记不住所有的账号密码,这时候就很容易登录失败,这时候怎么办呢? 接下来就让我来给大家演示一下Grafana的账号如果忘记了的话,该怎么找回自己的账号密码 操作 让我们来看一下具体的…...

使用 pytest-mock 进行 Python 高级单元测试与模拟

一、单元测试与模拟的意义 在软件开发中,单元测试用于验证代码逻辑的正确性。但实际项目中,代码常依赖外部服务(如数据库、API、文件系统)。直接测试这些依赖会导致: 测试速度变慢测试结果不可控产生副作用(如真实发送邮件)模拟(Mocking) 技术通过创建虚拟对象替代真…...

索提诺比率(Sortino Ratio):更精准的风险调整收益指标(中英双语)

索提诺比率(Sortino Ratio):更精准的风险调整收益指标 📉📊 📌 什么是索提诺比率? 在投资分析中,我们通常使用 夏普比率(Sharpe Ratio) 来衡量风险调整后的…...

prometheus+node_exporter+grafana监控K8S信息

prometheusnode_exportergrafana监控K8S 1.prometheus部署2.node_exporter部署3.修改prometheus配置文件4.grafana部署 1.prometheus部署 包下载地址:https://prometheus.io/download/ 将包传至/opt 解压 tar xf prometheus-2.53.3.linux-amd64.tar.gz 移动到…...

IDEA关闭SpringBoot程序后仍然占用端口的排查与解决

IDEA关闭SpringBoot程序后仍然占用端口的排查与解决 问题描述 在使用 IntelliJ IDEA 开发 Spring Boot 应用时,有时即使关闭了应用,程序仍然占用端口(例如:4001 端口)。这会导致重新启动应用时出现端口被占用的错误&a…...

kafka的ACL配置的sasl.kerberos.principal.to.local.rules配置解释

kafka配置acl认证的用户名转换规则 1、Kerberos中的介绍2、自定义sasl user name3、自定义ssl 的用户名4、关于kafka配置kerberos以及开启acl的实践 1、Kerberos中的介绍 Kerberos 关于此配置项的解释 https://web.mit.edu/Kerberos/krb5-latest/doc/admin/conf_files/krb5_co…...

山东大学软件学院nosql实验三

实验题目: 用Java做简单查询(2学时) 实验内容 用API方式,做简单查询。 实验要求 在以下要求中选择至少2个,使用Java语言实现数据查询,最终把数据输出到前端界面。 (1)找出年龄小于20岁的所有学生 &…...

Feign 类型转换问题解析:如何正确处理 `ResponseEntity<byte[]>` 返回值

在微服务架构中,Feign 是一种常见的用于服务间调用的客户端,它允许我们通过声明式接口来调用远程服务。使用 Feign 时,我们通常通过接口方法的返回类型来接收服务的响应体。然而,某些情况下,我们会遇到 Feign 无法正确解析响应体类型的问题,尤其是当服务返回一个如 Respo…...

零样本学习 zero-shot

1 是什么 2 如何利用零样本学习进行跨模态迁移? demo代码 安装clip pip install ftfy regex tqdm pip install githttps://github.com/openai/CLIP.git import torch import clip from PIL import Image# 加载 CLIP 模型 device "cuda" if torch.cuda.i…...

《深度学习实战》第3集:循环神经网络(RNN)与序列建模

第3集:循环神经网络(RNN)与序列建模 引言 在深度学习领域,处理序列数据(如文本、语音、时间序列等)是一个重要的研究方向。传统的全连接网络和卷积神经网络(CNN)难以直接捕捉序列中…...

mac下载MAMP6.8.1

因为mac的小皮面板没有php7.4了 链接:c9cc270e6961c17c.dmg官方版下载丨最新版下载丨绿色版下载丨APP下载-123云盘 鹅选一 附上大佬写的教程:MAMP PRO教程 - 牛奔 - 博客园...

动态表头导出EasyExcel

在 Spring Boot 中结合 EasyExcel 实现动态表头导出&#xff08;无实体类&#xff0c;表头和字段&#xff08;前端传表名&#xff0c;字段值动态查询&#xff0c;返回List<Map<String,Object>>&#xff09;由前端传递&#xff09;可以通过以下步骤实现。以下是完整…...

Python常见面试题的详解16

1. 如何强行关闭客户端和服务器之间的连接&#xff1f; 在网络编程中&#xff0c;有时需要强行中断客户端和服务器之间的连接。对于基于 TCP 协议的连接&#xff0c;由于其面向连接的特性&#xff0c;需要采取特定的步骤来确保连接被正确关闭&#xff1b;而 UDP 是无连接协议&a…...

BUU41 [GYCTF2020]FlaskApp1【SSTI】

题目&#xff1a; 加密处没啥事&#xff0c;但是解密的地方提交{{7*7}}就会返回报错界面&#xff0c;顺便把代码也爆出来了 text_decode base64.b64decode(text.encode()) 先将字符串 text编码为字节对象&#xff0c;然后使用 base64.b64decode 函数对这个字节对象进行 Base…...

今日运维之-Mac笔记本python环境问题

1. 问题&#xff1a;MAC升级系统后git报错&#xff1f; Error: Cant create update lock in /usr/local/var/homebrew/locks! Fix permissions by running:sudo chown -R $(whoami) /usr/local/var/homebrew Traceback (most recent call last):11: from /usr/local/Homebrew/…...

Vue进阶之AI智能助手项目(五)——ChatGPT的调用和开发

AI智能助手项目 前端页面Layout布局页面-viewssrc/views/chat/layout/Permission.vuesrc/views/chat/layout/sider/index.vuesrc/views/chat/layout/sider/List.vuesrc/views/chat/layout/sider/Footer.vueComponents 组件Header/index.vueMessage/index.vue前端页面 Layout布…...

PYTHONPATH

‌PYTHONPATH‌是一个环境变量&#xff0c;用于告诉Python解释器在哪里查找模块和包。它是一个目录的搜索路径&#xff0c;用于导入Python代码‌。 PYTHONPATH的作用 ‌导入自定义模块‌&#xff1a;如果您有自己的Python模块&#xff0c;可以将它们添加到PYTHONPATH中&#…...

运维Ansible面试题及参考答案

目录 简述 Ansible 的工作原理,它是如何实现对远程主机管理的? Ansible 是基于什么语言开发的?这门语言的特性对 Ansible 的功能实现有哪些帮助? 解释 Agentless 在 Ansible 中的含义,与基于 Agent 的自动化工具相比,优势体现在哪? Ansible 中的 Inventory 文件是什…...

01.Zabbix 概述

Zabbix 概述 Zabbix 概述1. Zabbix 功能2. Zabbix 架构3. Zabbix Server 启动进程4. Zabbix 术语 Zabbix 概述 运维行业有句话: “无监控、不运维”&#xff0c;监控俗称“第三只眼”。没了监控&#xff0c;基础运维&#xff0c;业务运维都是“瞎子”。 所以说监控是运维这个职…...

MongoDB 数据库简介

MongoDB 数据库简介 引言 随着互联网技术的飞速发展,数据已经成为企业的重要资产。为了高效地管理和处理这些数据,数据库技术应运而生。MongoDB作为一种流行的NoSQL数据库,因其灵活的数据模型和高效的数据处理能力,受到了广泛的关注。本文将为您详细介绍MongoDB的基本概念…...

易基因:RNA甲基化修饰和R-loop的交叉调控:从分子机制到临床意义|深度综述

大家好&#xff0c;这里是专注表观组学十余年&#xff0c;领跑多组学科研服务的易基因。 R-loop&#xff08;RNA-DNA杂合结构&#xff09;是转录调控、DNA复制和修复等关键细胞过程的重要组成部分。但R-loop异常积累可能会破坏基因组完整性&#xff0c;从而导致多种疾病的发生…...

八、Spring Boot:RESTful API 应用

创建第一个 Spring Boot RESTful API 应用 在现代 Web 开发中&#xff0c;RESTful API 是一种非常流行的设计风格&#xff0c;它基于 HTTP 协议&#xff0c;提供了简单、灵活的方式来构建网络应用。Spring Boot 作为一款强大的微服务框架&#xff0c;提供了丰富的工具和支持&a…...

NLP的预处理数据

处理文本数据的主要工具是Tokenizer。Tokenizer根据一组规则将文本拆分为tokens。然后将这些tokens转换为数字&#xff0c;然后转换为张量&#xff0c;成为模型的输入。模型所需的任何附加输入都由Tokenizer添加。 如果您计划使用预训练模型&#xff0c;重要的是使用与之关联的…...

取消票证会把指定的票证从数据库中删除,同时也会把票证和航班 等相关表中的关联关系一起删除。但在删除之前,它会先检查当前用户是否拥有这张票

在做航班智能客服问答系统时会遇到取消票证的场景&#xff0c;这里涉及数据库的操作时会把指定的票证从数据库中删除&#xff0c;同时也会把票证和航班等相关表中的关联关系一起删除。但在删除之前&#xff0c;需要先检查当前用户是否拥有这张票&#xff0c;只有票主才有权限取…...

Linux相关知识(文件系统、目录树、权限管理)和Shell相关知识(字符串、数组)

仅供自学&#xff0c;请去支持javaGuide原版书籍。 1.Linux 1.1.概述 Linux是一种类Unix系统。 严格来讲&#xff0c;Linux 这个词本身只表示 Linux内核&#xff0c;单独的 Linux 内核并不能成为一个可以正常工作的操作系统。所以&#xff0c;就有了各种 Linux 发行版&#…...

7种内外网数据交换方案全解析 哪种安全、高效、合规?

内外网数据交换方案主要解决了企业跨网络数据传输中的安全、效率与合规性问题。通过采用先进的加密技术、高效的数据传输协议以及严格的审批和审计机制&#xff0c;该方案确保了数据在内外网之间的安全交换&#xff0c;同时提高了传输效率&#xff0c;并满足了企业对数据合规性…...

深入解析React useEffect与useLayoutEffect:区别、原理与实践

&#x1f30c; ‌深入解析React useEffect与useLayoutEffect&#xff1a;区别、原理与实践 在React函数组件中&#xff0c;useEffect和useLayoutEffect是处理副作用的两个核心Hook。它们看似相似&#xff0c;但在执行时机和应用场景上有本质区别。本文将通过‌原理剖析‌、‌对…...