前言

我们在数据库建表时,经常会困扰某个字段应该选择什么数据类型,以及填写什么长度。选择数据类型方面一般没什么大问题,但是在填写对应的长度的时候,很多人就会困扰,对应长度填写的数字到底是什么含义,以及会影响到哪些东西。笔者在翻阅网上的相关文章时,发现一大半文章写的都是错的,主要的问题在于搞混了“字符”和“字节”这两者的含义,甚至有的人觉得这就是一回事。本文首先先来讲解“字符”和“字节”这两者的含义,然后在下一篇文章介绍MySQL的数据类型中长度的含义。

字符

以下是百科对字符的定义:

字符指类字形单位或符号,包括字母、数字、运算符号、标点符号和其他符号,以及一些功能性符号。

为了方便理解,你可以将字符简单地理解为你可以用输入法单独打出的任何单个的内容。对于中文和英文而言,以下内容分别都是1个字符:

(1)1个中文字,例如“是”

(2)1个英文字母,例如“T”

(3)1个中文标点符号,例如“。”

(4)1个英文标点符号,例如“.”

所谓的“字符串”就是由以上说的一个个字符组成的,字符串就是由一个个字符拼接而成的列表,以下是Javascript代码演示:

const 

在MySQL中,你可以使用 CHAR_LENGTH() 函数,查看指定字符串的字符数。例如:

SELECT 

字节

字符就介绍到这里,接下去说字节。百科给的定义是:

字节(Byte)是计算机信息技术用于计量存储容量的一种计量单位。

如果你只是在纸上写字,那么就用不到字节,但是如果你要把字存入电脑,就需要占用一定的磁盘空间。我们知道,电脑只能用高电位、低电位的形式存储数据,抽象出来,那就是电脑存数据最终只能用二进制的形式,也就是用0和1表示,无论任何数据,最终存储的时候都是一段包含多个0和1的串,例如“00110101”,这里的每一个0或1被称为1位。“位”就是最小的存储单位,然后我们把8位称为1个字节,也就是1个字节等于8位。这个概念类似于“1公里=1000米”,本质上是一回事,只是使用不同级别的单位而已。由于二进制实在太长,不方便展示,所以一般将1个字节(8位)的二进制转换成十六进制进行展示,例如将11010011转换成十六进制就是D3,这就是一个字节。

你没有办法直接在电脑里面存入字符,例如你没有办法将“你好世界”这四个字进行存储,现行的方案是将字符编码成0和1数字串的形式,两者建立映射关系。例如你可以用“1”表示“你”,用“10”表示“好”,用“101”表示“世”,用“111”表示“界”。反过来讲,如果你发现磁盘某一段地方存了“101”,那你就知道这里代表着“世”这个中文字。

当然以上的这个方案只是一套勉强行得通的方案,这种方案很多,我们把这种方案叫做“字符集”。我们在使用MySQL时,最常用的字符集就是 UTF-8 。这个字符集和上面说的这个方案没有本质区别,只是建立映射关系不同而已。

我们可以看下字符“你”在UTF-8字符集下的表示方式,在MySQL中你可以直接使用 HEX() 函数来进行转换。

SELECT HEX('你')        -- E4BDA0 

可以看出,使用UTF-8字符集,字符“你”需要使用3个字节来进行存储(分别是E4,BD,A0),实际存储的二进制是

111001001011110110100000 

再次说明,E4BDA0 只是 111001001011110110100000 的简写形式,两者本质上是一回事。

我们继续看一下,存储一个英文字符需要占用多少字节。

SELECT HEX('Z')    -- 5A 

可以看到,存储英文字符“Z”只需要一个字节。

在MySQL中,你可以直接使用 LENGTH() 函数来查看指定字符串占用的空间(字节数)。

SELECT LENGTH('你')    -- 3
SELECT LENGTH('Z')     -- 1
SELECT LENGTH('A啊a1') -- 6

你可以直接记住结论:在UTF-8字符集下,一个中文字符占用3个字节,一个英文字符占用1个字节。如果要计算字符串占用的字节数,只需要按照这个方式想加即可。

更容易理解的例子

如果通过以上的讲解还不能理解字符和字节的关系,我们再来讲一个更容易理解的例子。

比如某种饮料有大瓶3升的和小瓶1升的,但是无论“大瓶”的还是“小瓶”的,我们都称为“1瓶”。如果你将饮料导入饮料桶中,将大瓶倒入的时候要占用3升的空间,倒小瓶的时候,只需要占1升的空间。

上面例子说的“1瓶”饮料,对应1个字符,这是一个抽象概念,人为定义的。但是1个字符占用的空间各有不同,1个中文字符占用3个字节,1个英文字符占用1个字节,对应以上大瓶和小瓶的饮料倒入饮料桶占用的空间。

通过本文的讲解,你应该已经理解了字符和字节的含义,下一篇文章我们讲解MySQL的数据类型中长度的含义。

中文只占一个字符_一文搞懂字符和字节的含义相关推荐

  1. mysql 字节与字符_一文搞懂字符和字节的含义

    前言 我们在数据库建表时,经常会困扰某个字段应该选择什么数据类型,以及填写什么长度.选择数据类型方面一般没什么大问题,但是在填写对应的长度的时候,很多人就会困扰,对应长度填写的数字到底是什么含义,以及 ...

  2. mqtt 多个订阅者 只允许一个接收_一文读懂物联网的灵魂MQTT

    名词释义: MQTT--Message Queuing Telemetry Transport消息队列遥测传输 SUB--Subscribe订阅 PUB--Publish发布 QoS--Quality ...

  3. python语言语句快的标记是什么_一文搞懂Python程序语句

    原标题:一文搞懂Python程序语句 程序流 Python 程序中常用的基本数据类型,包括: 内置的数值数据类型 Tuple 容器类型 String 容器类型 List 容器类型 自然的顺序是从页面或 ...

  4. pythonxpath定位_一文搞懂 XPath 定位

    一文搞懂XPath 定位 XPath (XML Path Language) 是一门在 XML 文档中查找信息的语言,可用来在 XML 文档中对元素和属性进行遍历. XPath定位在爬虫和自动化测试中 ...

  5. 中文只占一个字符_长寿的人,3个部位可能“发红”,哪怕只占一个,身体还算健康...

    每个人都希望自己的身体健康,能够长寿一点.但是随着现在人们生活质量提高了,人们的饮食习惯和生活习惯发生了很大的改变,身体多多少少都会出现一点毛病,有些毛病会让身体造成疼痛感,但是有些毛病是需要去医院检 ...

  6. 一文搞懂字符编码问题,从此告别中文乱码

    在中文的语言环境里,身为程序员的我们一定会遇到过中文乱码的情况,究其原因就是字符编码的问题.在没有深入理解其原理之前,会觉得中文编码问题比较谜,莫名其妙地乱码,又稀里糊涂地好了. 字符编码是计算机技术 ...

  7. 一文搞懂字符和字节的含义

    前言 我们在数据库建表时,经常会困扰某个字段应该选择什么数据类型,以及填写什么长度.选择数据类型方面一般没什么大问题,但是在填写对应的长度的时候,很多人就会困扰,对应长度填写的数字到底是什么含义,以及 ...

  8. 生命周期共有那几个阶段_一文搞懂ReactNative生命周期的进化

    前言 React 15生命周期函数 Mounting阶段:组件初始化渲染 Updating阶段:组件更新 Unmounting阶段:组件卸载 进化:React 16生命周期函数 Mounting阶段: ...

  9. python爬虫 django搜索修改更新数据_一文搞懂Django数据库查询操作

    本文略长,读完约需十分钟.当做复习笔记效果更佳. 查询操作: 数据查询是数据库操作中一个非常重要的技术.查询一般就是使用filter.exclude以及get三个方法来实现.我们可以在调用这些方法的时 ...

最新文章

  1. Proximal Algorithms 4 Algorithms
  2. OpenCV | OpenCV彩色图像直方图算法实现
  3. 第一范式、第二范式、第三范式
  4. primefaces_轻量级Web应用程序框架:PrimeFaces(JSF)+ Guice + MyBatis(第2部分)
  5. bootstrap学习笔记(一)网络系统
  6. 你不知道的RabbitMQ集群架构全解
  7. android 360旋转动画,ANDROID——仿360手机卫士的旋转打分控件
  8. Linux下的微秒级定时器: usleep, nanosleep, select, pselect
  9. PIMPL(private implementation或者pointer to implementation)
  10. 批处理-删除环境变量
  11. 结对作业_代码复审= =
  12. Unity接入Facebook SDK--android篇
  13. 第二课: 雷电模拟器的多开和打开
  14. 0002计算机组成原理与体系结构02
  15. HMI-47-【多媒体】Title界面实现 2
  16. MockWebServer使用指南
  17. 2021年Java发展怎么样?现在学了Java技术出来是否还能找到工作?
  18. 年薪五十万的程序员在北京过着怎样的生活
  19. 关于ShareSDK的图文分享
  20. GB/T 21605化学品急性吸入毒性试验方法

热门文章

  1. SAP CRM WebClient UI图标url的生成逻辑
  2. SAP OData Total = 80是这样计算出来的
  3. ABAP Netweaver Webcontent path的determine逻辑
  4. CRM webClient UI搜索参数里max hit是怎么被后台服务器处理的
  5. SAP云平台上的Fiori administation工具
  6. 如何用ABAP读取LRAW中的数据
  7. Equipment download - generic inbound 和mapping处理逻辑分析
  8. 如何找到SAP support package名称
  9. windows系统下如何把excel数据转换成markdown格式的表格
  10. SAP CRM Fiori应用My Task的前台优化