运维分享|MySQL的字符集(一)

news2024/11/26 4:36:46

在这里插入图片描述

📫 作者简介:「六月暴雪飞梨花」,专注于研究Java,就职于科技型公司后端工程师
🏆 近期荣誉:华为云云享专家、阿里云专家博主、
🔥 三连支持:欢迎 ❤️关注、👍点赞、👉收藏三连,支持一下博主~

文章目录

  • 引言
  • 写作目的
  • 字符、字符集、字符编码
  • 为什么需要字符集
  • 常见的字符集
    • ASCII字符集
    • ISO8859-1字符集
    • GB2312字符集
    • GBK字符集
    • Unicode
  • 结束语

引言

陈康肃公善射,当世无双,公亦以此自矜。尝射于家圃,有卖油翁释担而立,睨之久而不去。见其发矢十中八九,但微颔之。康肃问曰:”汝亦知射乎?吾射不亦精乎?”。翁曰:“无他,
但手熟尔。”康肃忿然曰:“尔安敢轻吾射!”翁曰:“以我酌油知之。”乃取一葫芦置于地,以钱覆其口,徐以杓酌油沥之,自钱孔入,而钱不湿。因曰:“我亦无他,惟手熟尔。”康肃笑而遣之。

开篇引言引自六一居士欧阳修的《卖油翁》,旨在告诉各位,简单的事情做对了,难得事情做好了,没有什么好的方法,只是让自己熟练而已。就像我们写文章,浅显的道理大家都懂,却又似懂非懂,最后造成了不懂装懂的地步,而我写文的目的也无外乎贻笑大方,给自己一个博文强记的用途。
在这里插入图片描述

写作目的

前几篇博文也可谓是铁打的营盘流水的兵,固定的知识每个人都在写,每个人也都在学习。希望此文对大家也有所帮助。本文想深入了解下MySQL的字符集相关的内容,希望有这方面需求的阅读者可以作为一个参考范本。如果你去MySQL的官网查阅后有新的观点也不妨我们一起探讨、一起学习,共同进步。

字符、字符集、字符编码

什么是字符?

字符(Character)是各种文字和符号的总称,包括各国家文字、标点符号、图形符号、数字等。

什么是字符集?

字符集(Character set)是多个字符的集合,字符集种类较多,每个字符集包含的字符个数不同。在一个字库表中,每一个字符都有一个对应的二进制地址,而编码字符集就是这些地址的集合。

什么是字符编码?

是把字符集中的字符编码为特定的二进制数,以便在计算机中存储。每个字符集中的字符都对应一个唯一的二进制编码。

字符、字符集、字符编码的关系

  • 字符是一种符号,具象。

  • 字符集是字符的集合。

  • 字符集和字符编码一一对应,计算机在读取、解析、显示时根据这个对应关系显示对应的字符编码,使得计算机可以懂得这个约定是什么,最后展示给用户。

为什么需要字符集

当我们阅读上一小节后,这个问题应该就迎刃而解了——计算机底层的运算逻辑要统一——二进制数据。

我们所做的大部分的工作技术含量并不高,而且一直需要不断更新技术的更不多,能把一件事做到极致其实更多的不过是精益求精、不断打磨,不需要太多的技巧,唯熟能尔。

我们需要使用字符集来做运算,比较运算或者说是制定了一套规则,一套大家在计算机层面约定的规则。例如,我们如何知道 字符a 和 字符b 的大小?其实,比较字符的大小,其实是比较底层字符对应底层字符编码规则的顺序位置。 字符a 的底层字符编码为 0x01 字符b 的底层字符编码为 0x02,按照已经约定的规则计算,那么 字符a 排列在 字符b 的前面,所以 字符a 小于 字符b 。当然,这也不是一个肯定结果,例如我们在MySQL数据库中,设置不区分大小写,那么在这种情况下, 字符a 和 字符A 是相等关系。为什么会出现这个问题呢?下面让我们一探究竟。

在我们的这个世界中,有很多字符集,他们描述不同的国家的语言信息。不同国家根据自己的特性制造出来了不同的字符集。常见的字符集有ASCII字符集、ISO8859-1字符集、GB2312字符集、GBK字符集、Unicode字符集(常见的是UTF-8、UTF-16、UTF-32)。

常见的字符集

常见字符集名称:ASCII字符集GB2312字符集BIG5字符集GB18030字符集Unicode字符集等。

ASCII字符集

最早的编码字符集,全称是American Standard Code for Information Interchange,源于美国信息互换标准编码,基于罗马字母表产生的。ASCII字符集共包含00000000~01111111共128个字符,它表示的范围包括空格、标点符号、数字、大小写字母和一些特殊字符。例如

字符M的ASCII为01001101(十六进制是0x4D,十进制是77)

ISO8859-1字符集

ISO8859-1字符集在ASCII字符集的基础上增加了128个,共256额字符。他还有一个名字:Latin1。默认情况下,MySQL的字符集是Latin1(ISO_8859_1)。至于为什么是这个,请听下回分解。

GB2312字符集

GB2312字符集收录了汉字、拉丁字母、希腊字母、日文(平假名/片假名)、俄语(西里尔字母)等,其中汉字六千多,符号近七百,GB2312字符集兼容ASCII字符集。GB2312字符集使用规则很简单,如果一个字符存在于ASCII字符集中,则采取一字节编码;如果一个字符不存在于ASCII字符集,而存在于GB2312字符集中,那么采取二字节编码。

GBK字符集

GBK字符集在GB2312字符集的基础上面又进行了扩充且兼容GB2312字符集。GBK全称《汉字内码扩展规范》,支持国际标准ISO/IEC10646-1和国家标准GB13000-1中的全部中日韩汉字。GBK字符集中,中文字符占2个字节,英文占1个字节。 采用单双字节变长编码方式,英文使用单字节编码,完全兼容ASCII字符编码,中文部分采用双字节编码。

Unicode

这个不用讲太多了,我们常常见到他,无论是做数据运维、还是前后端开发。他收录了所有的字符,目前还在不断的扩充中。Unicode最多可以保存4个字节容量的字符。也就是说,要区分每个字符,每个字符的地址需要4个字节。这是十分浪费存储空间的,于是,程序员就设计了几种字符编码方式,比如:UTF-8、UTF-16、UTF-32。最常使用的就是UTF-8,UTF-8是一种变长字符编码。

注意⚠️:UTF-8不是编码规范,而是编码方式或者说是其中一种解决方案。

结束语

对于同一个字符,采取不同的编码字符集,展示的结果也就不相同。凡是就怕认真二字,真的肯花心思,很难有什么事情做不好。怕就怕,资质平平,却又不肯花心思。那就不得怨天尤人了。我是「Aion」,一个爱钻研的开发者,希望同大家一起分享知识。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1342935.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Servlet获取前端请求的参数和中文乱码的解决方案

目录 1.Servlet获取前端请求的参数 1.1创建jsp 1.2构建servlet实例 1.3配置web.xml 2.中文乱码的解决方案 2.1请求时候的乱码问题 2.2响应时候中文乱码的问题 学好Servlet必须紧紧围绕着请求和响应这两个概念。 下面开始写在请求的时候前端带数据到servlet里面&#xff…

DP进阶之路——01背包问题

题目链接:题目页面 小明是一位科学家,他需要参加一场重要的国际科学大会,以展示自己的最新研究成果。他需要带一些研究材料,但是他的行李箱空间有限。这些研究材料包括实验设备、文献资料和实验样本等等,它们各自占据不…

【数据结构】C语言实现双链表的基本操作

双链表及其基本操作的实现 导言一、单链表与双链表二、双链表类型的创建三、双链表的初始化四、双链表的创建五、双链表的遍历六、双链表的查找七、双链表的插入八、双链表的删除结语 导言 大家好,很高兴又和大家见面啦!!! 经过…

SpringBoot+modbus4j实现ModebusTCP通讯读取数据

场景 Windows上ModbusTCP模拟Master与Slave工具的使用: Windows上ModbusTCP模拟Master与Slave工具的使用-CSDN博客 Modebus TCP Modbus由MODICON公司于1979年开发,是一种工业现场总线协议标准。 1996年施耐德公司推出基于以太网TCP/IP的Modbus协议&…

Linux - 设置虚拟机和主机IP在同一网段(桥接)

1.查看主机ip地址等相关信息。 ipconfig -all 2.设置虚拟网络编辑器 打开虚拟网络编辑器 设置虚拟网络编辑器,设置为桥接模式。(记得以管理员方式打开VMware)。 3.修改虚拟机网卡文件 查看虚拟机ip,我们的目标是将其修改为与主机同一网段…

JAVA电商平台 免 费 搭 建 B2B2C商城系统 多用户商城系统 直播带货 新零售商城 o2o商城 电子商务 拼团商城 分销商城

在数字化时代,电商行业正经历着前所未有的变革。鸿鹄云商的saas云平台以其独特的架构和先进的理念,为电商行业带来了全新的商业模式和营销策略。该平台涉及多个平台端,包括平台管理、商家端、买家平台、微服务平台等,涵盖了pc端、…

合并区间(LeetCode 56)

文章目录 1.问题描述2.难度等级3.热门指数4.解题思路参考文献 1.问题描述 以数组 intervals 表示若干个区间的集合,其中单个区间为 intervals[i] [starti, endi] 。请你合并所有重叠的区间,并返回 一个不重叠的区间数组,该数组需恰好覆盖输…

虚拟机域环境的搭建

开始准备两台虚拟机Windows Server 2016和Windows10. Windows Server 2016的配置: 1.要用Administrator管理员,首先创建一个Administrator管理员 在此就可以创建一个新用户 然后退出登录就可以了。 2.开始环境的搭建 第一步: 第二步&…

Qt篇——QwtPainter::drawPie绘制扇形

QwtPainter::drawPie(QPainter *painter, const QRectF &rect, int startAngle, int angle); 一、参数含义: painter: 重绘函数中的painter对象 rect: 要绘制扇形的圆的外切矩形。 startAngle: 要绘制的扇形的起始角 …

【计算机毕业设计】SSM游戏点评网站

项目介绍 本项目分为前后台,前台为普通用户登录,后台为管理员登录; 管理员角色包含以下功能: 管理员登录,管理员管理,网站用户管理,游戏资讯管理,游戏类型管理,城市信息管理,竞技场管理,游戏信息管理,游戏评价信息管理等功能。…

深眸科技创新工业AI视觉系统,与机械臂协同工作实现视觉引导功能

工业AI视觉系统:工业AI视觉系统能够在工业环境中进行缺陷检测、视觉分拣、物流供包、拆码垛、工业上料等应用。 随着国内工业企业不断进步和发展,传统机器视觉无法满足企业对复杂操作流程的需求,多数制造企业对于机器视觉系统的需求增长。而…

苹果Mac电脑甘特图管 EasyGantt最新 for mac

EasyGantt提供直观的界面,让用户能够轻松创建具有时间轴视图的甘特图。你可以添加并排列任务、设置任务的开始和结束日期、调整任务之间的依赖关系等。 任务管理:软件允许你添加、编辑和删除任务,设定任务的优先级和状态,并为每个…

Openstack开启虚拟化嵌套

好久没写东西了,前两天我准备在虚机上装一个vmware 的虚机,结果失败了,提示如下,由于我是虚机上安装虚机,我的宿主机肯定是开启了vt-x和vt-d的 查了一些资料,这个需要打开nested,先看看nested返回是否为Y&a…

PicGo+GitHub搭建免费图床

PicGoGitHub搭建免费图床 步骤 1: 安装 PicGo步骤 2:创建图床仓库步骤 3: 配置 GitHub Token步骤 4: 配置 PicGo步骤 5: 上传图片步骤 6: 访问图片 使用 GitHub 作为图床的优势在于免费、稳定且具有版本控制功能,特别适合个人博客、小型项目等。PicGo作为一个开源的…

无论男孩女孩都要尽情打扮

这款柔软又细腻的开衫外套 上身体验感很不错的哈 舒适软糯百搭还透气,抗起球的面料 黑灰两色简单大方 胸前加上了流行的刺绣设计,可爱又精致 单穿内搭都可,现在天气还比较冷 外面可以套个羽绒服之类的 时尚叠穿风,韩系范儿…

c语言-位操作符练习题

文章目录 前言一、n&(n-1)的运用场景(n为整数)二、&1 和 >>的应用场景总结 前言 本篇文章介绍利用c语言的位操作符解决一些练习题,目的是掌握各个位操作符的使用和应用场景。 表1.1为c语言中的位操作符 操作符含义&按位与|按位或^按位异或~按位…

CSS 缩减中心动画

<template><!-- mouseenter"startAnimation" 表示在鼠标进入元素时触发 startAnimation 方法。mouseleave"stopAnimation" 表示在鼠标离开元素时触发 stopAnimation 方法。 --><!-- 容器元素 --><div class"container" mou…

HarmonyOS云开发基础认证【题库答案】

HarmonyOS应用开发者基础认证【题库答案】 HarmonyOS应用开发者高级认证【题库答案】 一、判断题 应用架构的演进依次经历了微服务架构、单体架构、Serverless架构等阶段。&#xff08;错&#xff09;鸿蒙应用可以使用Arkts开发&#xff08;对&#xff09;认证服务在绑定微信账…

python/selenium/jenkins整合

1、新建python项目&#xff0c;专门写selenium代码&#xff0c;建议用pytest框架写。 2、把代码上传到代码库中。 3、环境配置&#xff1a; 3.1 在跑jenkins的机器上配置好python环境&#xff0c;需要python --version能在任何地方运行&#xff08;配置好系统环境变量&#…

vue如何实现局部刷新?

应用场景&#xff1a; 比如你要切换tap栏实现刷新下面form表单等&#xff0c;相当于刷新页面。 如何使用如下&#xff1a; <div v-if"isReloadData"> 比如你想刷新那个位置就把 v-if"isReloadData"写到那个标签上 </div> 在data中定义刷新标…