Mysql系列之--字符集

server/2025/2/8 18:24:01/

1、字符集

1.1、字符集简介

我们知道在计算机中只能存储二进制,那么如何将字符存储到计算机中,这个时候就需要将字符映射称为二进制,将所有字符映射为二进制就需要映射表。建立映射表需要注意:

1、明确哪些字符需要映射为二进制,即界定需要映射的字符范围

2、如何映射,一个字符映射为二进制数据为编码,二进制映射为字符为解码

使用一个概念“字符集”来描述字符范围和编码规则,我们可以自定义字符集

包含字符 'a' 'b' 'A' 'B'
编码规则如下:
采用 1 个字节编码一个字符的形式,字符和字节的映射关系如下:
'a' -> 00000001 (十六进制:0x01)
'b' -> 00000010 (十六进制:0x02)
'A' -> 00000011 (十六进制:0x03)
'B' -> 00000100 (十六进制:0x04)
'bA' -> 0000001000000011 (十六进制:0x0203)
'baB' -> 000000100000000100000100 (十六进制:0x020104)
'cd' -> 无法表示,字符集xiaohaizi不包含字符'c'和'd'

1.2、重要的字符集

由于使用计算机的各个国家比较多,所以不同的人制定出来不同的字符集。这些字符集的字符范围和编码规则个不一样。列举一些常用字符集

ASCII字符集

中共收录了128个字符,包括空格、标点符号、数字、字母、不可见字符。总共128个字符,所以可以使用一个字节进行编码

IS O8859-1字符集

总共收录了256个字符,是在ASCII字符集的基础上扩充了128个西欧字符(德法两国字母),同样可以使用一个字节进行编码。

GB2312字符集

收录了汉字以及拉丁字母、希腊字母、日文平假名及片假名字母、俄语西里尔字母。其中收录汉字 6763 个,其他文字符号 682 个。同时这种字符集又兼容 ASCII 字符集,所以在编码方式上显得有些奇怪。
GBK字符集

 收录范围上对GB2313进行了扩充,编码上兼容GB2312

utf8字符集

收录地球上所有能想到的字符,而且仍旧不断扩充,这种字符兼容ASCII编码,编码一个字符需要1-4个字节长度。例如

1.3、utf8和utf8mb4

我们上边说 utf8 字符集表示一个字符需要使用 1 4 个字节,但是我们常用的一些字符使用 1 3
字节就可以表示了。而在 MySQL 中字符集表示一个字符所用最大字节长度在某些方面会影响系统
的存储和性能,所以设计MySQL 的大叔偷偷的定义了两个概念:
utf8mb3 :阉割过的 utf8 字符集,只使用 1 3 个字节表示字符。
utf8mb4 :正宗的 utf8 字符集,使用 1 4 个字节表示字符。
有一点需要大家十分的注意,在 MySQL utf8 utf8mb3 的别名,所以之后在 MySQL 中提到 utf8 就意味着使用 1~3 个字节来表示一个,utf8或者utf8mb4都是Unicode字符集,utf8包含了部分Unicode字符,utf8mb4是更大的utf8字符集。

 

1.4、排序规则

排序规则决定了字符的排序和比较方式,常见的排序规则

  • utf8mb4_unicode_ci: 基于 Unicode 的排序规则,不区分大小写。

  • utf8mb4_general_ci: 一种较老的排序规则,不区分大小写,但在某些语言中的排序可能不准确。

  • utf8mb4_bin: 基于二进制值的排序规则,区分大小写。

1.5、Mysql字符集常见操作

1、查看支持的字符集

SHOW CHARACTER SET;

2、设置字符集

  • 服务器级别:
[mysqld]
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
CREATE DATABASE mydb CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
  • 表级别
CREATE TABLE mytable (id INT PRIMARY KEY,name VARCHAR(100)
) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
  • 列级别
CREATE TABLE mytable (id INT PRIMARY KEY,name VARCHAR(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci
);


http://www.ppmy.cn/server/166005.html

相关文章

【Uniapp-Vue3】从uniCloud中获取数据

需要先获取数据库对象: let db uniCloud.database(); 获取数据库中数据的方法: db.collection("数据表名称").get(); 所以就可以得到下面的这个模板: let 函数名 async () > { let res await db.collection("数据表名称…

python循环

while和for的区别 while 和 for 的区别,while是不定循环,循环次数不固定。for的循环次数通常是固定的 continue 跳出本次循环,直接执行下一次循环 break 退出循环,执行循环外的代码 exit() 退出python程序&#x…

【HarmonyOS NEXT】systemDateTime 时间戳转换为时间格式 Date,DateTimeFormat

【HarmonyOS NEXT】systemDateTime 时间戳转换为时间格式 Date,DateTimeFormat 一、前言 在鸿蒙应用开发中,经常需要将时间戳转化为标准时间格式。即:一串数字转化为年月日时分秒。 时间戳通常是一个长整型的数字,如 163041600…

深度学习 Pytorch 建模可视化工具TensorBoard的安装与使用

50 TensorBoard的安装和使用 在深度学习建模过程中,为了能够快速绘制模型基本结构、观察模型评估指标伴随训练过程的动态变化情况,当然也为了能够观察图像数据,我们可以使用TensorBoard工具来进行Pytorch深度学习模型的可视化展示。 Tensor…

《手札·开源篇》数字化转型助力永磁电机企业降本增效:快速设计软件如何让研发效率提升40%?

数字化转型助力永磁电机企业降本增效:快速设计软件如何让研发效率提升40%? 一、痛点:传统研发模式正在吃掉企业的利润 永磁电机行业面临两大挑战: 研发周期长:一款新电机从设计到量产需6-12个月,电磁计算…

mac环境下,ollama+deepseek+cherry studio+chatbox本地部署

春节期间,deepseek迅速火爆全网,然后回来上班,我就浅浅的学习一下,然后这里总结一下,我学习中,总结的一些知识点吧,分享给大家。具体的深度安装部署,这里不做赘述,因为网…

ChatGPT提问技巧:行业热门应用提示词案例-文案写作

ChatGPT 作为强大的 AI 语言模型,已经成为文案写作的得力助手。但要让它写出真正符合你需求的文案,关键在于如何与它“沟通”,也就是如何设计提示词(Prompt)。以下是一些实用的提示词案例,帮助你解锁 ChatG…

DeepSeek R1技术报告关键解析(8/10):DeepSeek-R1 的“aha 时刻”,AI 自主学习的新突破

1. 什么是 AI 的“aha 时刻”? 在强化学习过程中,AI 的推理能力并不是线性增长的,而是会经历一些关键的“顿悟”时刻,研究人员将其称为“aha 时刻”。 这是 AI 在训练过程中突然学会了一种新的推理方式,或者能够主动…