mysql的字符集和比较规则
mysql的字符集和比较规则
- 一、字符集(Character Set)
- 二、比较规则(Collation)
- 三、客户端与服务器的字符集转换
- 四、注意事项
- 总结
深度解读mysql是怎样运行的
MySQL的字符集和比较规则是其处理字符串存储、传输及比较的核心机制:
一、字符集(Character Set)
- 定义
- 字符集是字符与二进制数据的映射规则,用于编码(文字→二进制)和解码(二进制→文字)。
- 常见字符集包括ASCII、GB2312、GBK、UTF-8等。MySQL中UTF-8分为utf8mb3(1-3字节)和utf8mb4(1-4字节),后者支持更广泛字符(如Emoji)。
- 级别设置MySQL支持四个级别的字符集配置:
- 服务器级别:通过character_set_server和collation_server系统变量设置,默认值可能为latin1(旧版本)或utf8mb4(MySQL 8.0+)。
- 数据库级别:创建或修改数据库时指定,例如:
CREATE DATABASE db_name CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci;
若未指定,则继承服务器设置。 - 表级别:继承数据库设置,也可单独指定。
- 列级别:同一表中不同列可设置不同字符集。
- 查看与修改
- 查看当前字符集:
SHOW VARIABLES LIKE ‘character_set_%’; – 查看所有字符集相关变量
SHOW CHARACTER SET; – 查看支持的字符集 - 修改字符集:
- 配置文件:修改my.cnf或my.ini,设置character_set_server=utf8mb4。
- 运行时修改:
SET character_set_server = ‘utf8mb4’; – 修改服务器级别字符集
二、比较规则(Collation)
- 定义
- 比较规则定义字符串的排序和比较方式,例如是否区分大小写、重音符号等。
- 每个字符集有多个比较规则,默认规则通常以_ci(case-insensitive,不区分大小写)结尾,如utf8mb4_0900_ai_ci。
- 级别设置
- 比较规则与字符集绑定,修改字符集时比较规则会自动调整为该字符集的默认值,反之亦然。例如:
ALTER TABLE t MODIFY col VARCHAR(10) COLLATE utf8mb4_bin; – 修改列的排序规则
此时字符集会同步调整为utf8mb4。
- 查看与修改
- 查看比较规则:
SHOW COLLATION; – 查看所有比较规则
SHOW VARIABLES LIKE ‘collation_%’; – 查看当前比较规则设置
三、客户端与服务器的字符集转换
- 通信流程
- 请求阶段:客户端使用character_set_client编码请求,服务器解码后转换为character_set_connection处理。
- 响应阶段:服务器将结果按character_set_results编码返回,客户端解码显示。
- 变量关联:
- character_set_client:客户端请求的字符集。
- character_set_connection:服务器处理时的中间字符集。
- character_set_results:响应字符集。
- 乱码问题
- 若客户端与服务器字符集不一致,可能导致乱码。需确保三者统一,例如:
SET NAMES ‘utf8mb4’; – 同时设置client/connection/results的字符集
四、注意事项
- 兼容性问题
- 修改字符集时需确保现有数据兼容新字符集,否则可能转换失败。例如:将包含中文字符的列从utf8mb4改为ascii会报错。
- 推荐使用utf8mb4替代utf8mb3,以支持更全面的Unicode字符(如Emoji)。
- 默认值变化
- 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’
- 存储过程:
- 变长字段长度列表:
- name字段实际长度:张三在utf8mb4中占6字节(0xE5BCA0 0xE4B889),长度值0x06。
- code字段为latin1定长,不记录长度。
- 变长字段列表逆序存储:[0x06]。
- 记录头信息:next_record指向下一条记录的偏移量(如0x0123)。
- 真实数据:
- id=1(4字节)、name的6字节数据、code的10字节数据(定长,不足部分填充空格)。
3. 解码:按utf8mb4解码name字段,按latin1解码code字段。
相关文章:
mysql的字符集和比较规则
mysql的字符集和比较规则 一、字符集(Character Set)二、比较规则(Collation)三、客户端与服务器的字符集转换四、注意事项总结 深度解读mysql是怎样运行的 MySQL的字符集和比较规则是其处理字符串存储、传输及比较的核心机制&…...
什么是LoRA微调
LoRA是大模型微调方法的一种,它的特点是只在模型的 部分权重(如 QKV 矩阵) 上 添加可训练参数 通过 低秩矩阵(AB) 来优化参数更新 优点: 极大降低显存消耗(deepseek 7B 只需 10GB) 适…...
热管理系统:新能源汽车的 “温度管家”
在新能源汽车的众多系统中,热管理系统堪称是一位默默守护的 “温度管家”,其重要性不容小觑。传统燃油车的热管理主要围绕发动机、变速箱冷却系统和空调系统,而新能源汽车的热管理则涵盖了电池系统、电机电控、空调系统等绝大部分零部件 &…...

如何修改Windows系统Ollama模型存储位置
默认情况下,Ollama 模型会存储在 C 盘用户目录下的 .ollama/models 文件夹中,这会占用大量 C 盘空间,增加C盘“爆红”的几率。所以,我们就需要修改Ollama的模型存储位置 Ollama提供了一个环境变量参数可以修改Ollama的默认存在位…...
《网络安全入门实战手册》
0经验转行网络安全,个人分享一下学习中总结的文档,以下为目录可以点击标题看对应文章,欢迎评论区讨论,后期会发更多安全相关的学习资料等。希望跟大家一起进步。 第1章:网络安全基础知识 1、什么是网络安全ÿ…...

一文详解U盘启动Legacy/UEFI方式以及GPT/MBR关系
对于装系统的老手而说一直想研究一下装系统的原理,以及面对一些问题时的解决思路,故对以前的方法进行原理上的解释,主要想理解其底层原理。 引导模式 MBR分区可以同时支持UEFI和Legacy引导,我们可以看一下微pe制作的启动盘&#…...

如何查看java的字节码文件?javap?能用IDEA吗?
编译指令: javac YourProject.java 查看字节码文件的指令: javap -c -l YourProject.class 不添加-c指令就不会显示字节码文件: 不添加 -l 就不会显示源代码和字节码文件的对应关系: 添加-l之后多出来这些: IDEA不太…...
加油站(力扣134)
既然每一个加油站都有对应的加油量和耗油量,我们不妨计算一下每个加油站的汽油净增量。如果每个加油站净增量之和不为负数,则说明一定可以找到唯一的起始点。那我们该如何找到这个起始点呢?我们设置最开始的起点为第0个加油站,接着…...

1.vue使用vite构建初始化项目
npm create vuelatest❯ npm create vuelatest> npx > create-vueVue.js - The Progressive JavaScript Framework✔ Project name: … vue3_test ✔ Add TypeScript? … No / Yes ✔ Add JSX Support? … No / Yes ✔ Add Vue Router for Single Page Application dev…...
汽车零部件开发应该具备哪些编程思维?
目录 1、功能安全思维 2、实时性与确定性思维 3、可靠性和冗余思维 4、硬件软件协同思维 5、CAN总线通信思维 6、故障诊断和自诊断思维 7、功耗优化思维 8、软件更新和版本管理思维 9、用户体验与安全性思维 汽车零部件开发中,嵌入式软件在车辆系统中的作用…...

25工程管理研究生复试面试问题汇总 工程管理专业知识问题很全! 工程管理复试全流程攻略 工程管理考研复试真题汇总
工程管理复试面试心里没底?别慌!学姐手把手教你怎么应对复试! 很多同学面对复试总担心踩坑,其实只要避开雷区掌握核心技巧,逆袭上岸完全有可能!这份保姆级指南帮你快速锁定重点,时间紧迫优先背…...

#4【CVPR2024】SHIP:图像融合的一种协同高阶交互范式
📜 Probing Synergistic High-Order Interaction in Infrared and Visible Image Fusion 🍕 源码: https://github.com/zheng980629/SHIP 先前融合规则与我们提出的范式之间的比较。之前的工作要么(a)缺乏明确的交互&a…...

虚拟机从零实现机器人控制
1. 系统安装 因Docker不适合需要图形界面的开发,因此使用虚拟机VMware方便可视化界面方式查看效果,相关软件可以从官网下载,这里有一整套免费安装文件百度网盘地址: 2. ROS安装 Ubuntu 22.04:https://docs.ros.org…...

趣味数学300题1981版-八个等式、五个5等于24
八个等式 分析:此问题的求解思路是按照最后一步运算的运算符号进行分类。示例中最后一步的运算是除法,只要被除数与除数相等且不为0,就可以得到结果1.因此我们还可以对于结果等于1的情况列出其他的算式。如果保持最后一步运算为除法运算&…...

Microsoft Office 2024 软件安装教程(免费)
1.通过百度网盘下载Microsoft Office 2024安装包 下载地址为: https://pan.baidu.com/s/1jk1kvQsKFH9dZGF5xfGgiQ?pwdjbkv 提取码: jbkv 。 2.安装环境 Win10~Win11或更高。 3.安装步骤 (1)下载压缩包,解压缩。 (2…...

Linux 常见指令
linux 常见指令 Alt Enter 全屏 退出全屏 pwd: 显示用户所处路径 ls :显示当前路径下的文件或者目录名称 [ltVM-8-13-centos ~]$ ls 106 [ltVM-8-13-centos ~]$ ls -l ll :显示当前路径下的文件或者目录名称更多属性信息 [ltVM-8-13-cen…...
HTML Application(hta)入门教程
简介 HTA是HTML Application的缩写,又称为HTML应用程序。 hta是一个可执行文件,双击可以直接运行 hta与html非常相似,可直接将文件后缀改为.hta来获得HTA格式的文件。 支持VBS和JavaScript html的权限被限制在网页浏览器内,只有操…...

pytest运行用例的常见方式及参数
标题pytest运行用例方式及参数 用例结构目录 “”" 在最外层目录下执行所有的用例 参数说明: -s:显示用例的打印信息 -v:显示用例执行的详细信息 –alluredir:指定allure报告的路径 –clean-alluredir:清除allure报告的路径 -n:指定并发的进程数 -x:出现一条用…...
XML Schema 元素替换
XML Schema 元素替换 引言 XML(可扩展标记语言)是一种用于存储和传输数据的标记语言。XML Schema 是一种用于定义 XML 文档结构的语言,它描述了 XML 文档的结构、数据类型和约束。在处理 XML 文档时,有时需要对特定的元素进行替换,以满足特定的需求。本文将介绍 XML Sch…...
OpenBMC:BmcWeb app.run
1.监听用户移除signal //src\webserver_run.cpp int run() {...bmcweb::registerUserRemovedSignal();... } //include\user_monitor.hpp inline void onUserRemoved(sdbusplus::message_t& msg) {sdbusplus::message::object_path p;msg.read(p);std::string username …...

wordpress后台更新后 前端没变化的解决方法
使用siteground主机的wordpress网站,会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后,网站没有变化的情况。 不熟悉siteground主机的新手,遇到这个问题,就很抓狂,明明是哪都没操作错误&#x…...

跨链模式:多链互操作架构与性能扩展方案
跨链模式:多链互操作架构与性能扩展方案 ——构建下一代区块链互联网的技术基石 一、跨链架构的核心范式演进 1. 分层协议栈:模块化解耦设计 现代跨链系统采用分层协议栈实现灵活扩展(H2Cross架构): 适配层…...
Java线上CPU飙高问题排查全指南
一、引言 在Java应用的线上运行环境中,CPU飙高是一个常见且棘手的性能问题。当系统出现CPU飙高时,通常会导致应用响应缓慢,甚至服务不可用,严重影响用户体验和业务运行。因此,掌握一套科学有效的CPU飙高问题排查方法&…...

Yolov8 目标检测蒸馏学习记录
yolov8系列模型蒸馏基本流程,代码下载:这里本人提交了一个demo:djdll/Yolov8_Distillation: Yolov8轻量化_蒸馏代码实现 在轻量化模型设计中,**知识蒸馏(Knowledge Distillation)**被广泛应用,作为提升模型…...

Python Ovito统计金刚石结构数量
大家好,我是小马老师。 本文介绍python ovito方法统计金刚石结构的方法。 Ovito Identify diamond structure命令可以识别和统计金刚石结构,但是无法直接输出结构的变化情况。 本文使用python调用ovito包的方法,可以持续统计各步的金刚石结构,具体代码如下: from ovito…...

【LeetCode】算法详解#6 ---除自身以外数组的乘积
1.题目介绍 给定一个整数数组 nums,返回 数组 answer ,其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法,且在 O…...

Kubernetes 节点自动伸缩(Cluster Autoscaler)原理与实践
在 Kubernetes 集群中,如何在保障应用高可用的同时有效地管理资源,一直是运维人员和开发者关注的重点。随着微服务架构的普及,集群内各个服务的负载波动日趋明显,传统的手动扩缩容方式已无法满足实时性和弹性需求。 Cluster Auto…...
13.10 LangGraph多轮对话系统实战:Ollama私有部署+情感识别优化全解析
LangGraph多轮对话系统实战:Ollama私有部署+情感识别优化全解析 LanguageMentor 对话式训练系统架构与实现 关键词:多轮对话系统设计、场景化提示工程、情感识别优化、LangGraph 状态管理、Ollama 私有化部署 1. 对话训练系统技术架构 采用四层架构实现高扩展性的对话训练…...

Redis上篇--知识点总结
Redis上篇–解析 本文大部分知识整理自网上,在正文结束后都会附上参考地址。如果想要深入或者详细学习可以通过文末链接跳转学习。 1. 基本介绍 Redis 是一个开源的、高性能的 内存键值数据库,Redis 的键值对中的 key 就是字符串对象,而 val…...

timestamp时间戳转换工具
作为一名程序员,一款高效的 在线转换工具 (在线时间戳转换 计算器 字节单位转换 json格式化)必不可少!https://jsons.top 排查问题时非常痛的点: 经常在秒级、毫秒级、字符串格式的时间单位来回转换,于是决定手撸一个…...