MySQL 数据类型及占用空间

article/2025/9/27 5:27:06

MySQL 数据类型

元数据

VARCHAR类型字符串及DECIMAL的占用空间实际上包含2部分,一是存储数据本身占用的空间,二是描述数据的元数据占用的空间,例如VARCHAR类型会使用1个字节记录存入数据实际的字符数。

最大行大小限制

MySQL表的内部表示具有65,535字节的最大行大小限制,即使存储引擎能够支持更大的行也是如此。BLOBTEXT列只使用行大小9到12个字节,因为它们的内容与行的其余部分分开存储。

字符集为utf8mb4时,每个字符占4个字节,VARCHAR字段最大可创建的长度为65535/4=16383,超出则会提示Row size too large. The maximum row size for the used table type, not counting BLOBs, is 65535. You have to change some columns to TEXT or BLOBs

整型

常用的整数数据类型有tinyintsmallintmediumintintbigint共计5种。在声明列时,后面也可以跟上n,例如int(n)。它的含义是“显示位宽”,这个n无论填任何数,不影响存储空间,仅影响在检索时的输出格式,而且在非常严格的情况下才成立。

在声明列的时候,要使用到该特性,必须加上 zerofill(填充0)属性,即语句为

`id` int(20) unsigned zerofill DEFAULT NULL

zerofill必须同时加unsigned

“无用”的显示位宽特性:

  1. 对存储环节没有任何帮助,仅改变输出显示环节。
    int(20) unsigned也只能存储4个字节(0~2^32),不会达到bigint(20)所使用的8个字节存储空间
  2. 格式化方式仅仅只有“补0”一种方式。
    当插入的数字小于显示位宽配置时,在特定客户端检索输出时,会在数字前“补0”,凑足数字
  3. 仅针对特定客户端输出时才有显示效果,目前仅发现使用MySQL Shell才有显示效果,其他客户端连接时均无。

占用空间

整型的占用空间是固定的,均与其后设置的n无关,例如设置字段类型为int,则无论n设置什么,它占用的空间就是4个字节。

类型占用空间取值范围
tinyint1个字节-128~127
smallint2个字节-32768~32767
mediumint3个字节-223~ 223 - 1
int4个字节-231~ 231- 1
bigint8个字节-263~ 263- 1

当插入的值,超出取值范围的时候,MySQL并不会报错,而是自动变成成在取值范围内最接近该值的边界值。例如字段为 tinyint ,有符号型时取值范围 -128至127 ,当你输入-222时,不会报错,会自动存入最接近-222的-128,当你输入222时,会自动存入127。

浮点型

FLOAT类型固定占用4个字节, DOUBLE类型固定占用8个字节,逻辑和上述的整型类似,不再赘述。

下面我们来说说DECIMAL类型,它的定义方式是DECIMAL(M,D),其中M表示最大位数,D表示小数点右侧的位数。对于DECIMAL(M,D)来说,M-D的值为小数点前的位数,D的值为小数点后的位数,要算取值范围则各个位置填充9,取正负范围。

这里的“位”不是二进制的比特位,而是指十进制的数字的位数。

例如我们定义DECIMAL(5,2),则表示最大位数为5位,小数点后2位,因此小数点前还剩下3位,于是取值范围为-999.99至999.99

占用空间

DECIMAL(M,D)的存储方式和其他数字类型都完全不同,它是以字符串形式进行存储

1个数字字符占用1个字节,因此定义为DECIMAL(M,D) 占用 M 个字节。

DECIMAL类型在存储时有补0操作。小数点前不足,向更高位补0,小数点后不足,向更低位补0。
以DECIMAL(5,2)为例,如果准备存入9.5,实际存入 ‘009.50’ ,转化为十六进制为30 30 39 2E 35 30

字符串类型

CHAR(n)VARCHAR(n)两者中的n含义均为该字段最大可容纳的字符数

4.0版本以下,varchar(20),指的是20字节,如果存放UTF8汉字时,只能存6个(每个汉字3字节)
5.0版本以上,varchar(20),指的是20字符,无论存放的是数字、字母还是UTF8汉字(每个汉字3字节),都可以存放20个,最大大小是65532字节

字符串(文本)类型特点长度长度范围占用的存储空间
CHAR(M)固定长度M0 <= M <= 255M个字符
VARCHAR(M)可变长度M0 <= M <= 65535(Length + 1) 个字符

CHAR_LENGTH()函数返回字符串的字符数, LENGTH()函数返回字符串的字节数

CHAR

  • CHAR(M) 类型一般需要预先定义字符串长度。如果不指定(M),则表示长度默认是1个字符。
  • 如果保存时,数据的实际长度比CHAR类型声明的长度小,则会在右侧填充空格以达到指定的长度。当MySQL检索CHAR类型的数据时,CHAR类型的字段会去除尾部的空格。
  • 定义CHAR类型字段时,声明的字段长度即为CHAR类型字段所占的存储空间的字节数。

对于CHAR字段,在使用CHAR_LENGTH()LENGTH()函数查询时,输出时自动省略右侧空格

insert into `tmp`(`nick`) values ('为s ');
---查询
select nick,char_length(nick),length(nick) from `tmp` where id = 1;
---nick=>'为s',CHAR_LENGTH(nick)=>2,LENGTH(nick)=>4

VARCHAR

  • VARCHAR(M) 定义时,必须指定长度M,否则报错。
  • 检索VARCHAR类型的字段数据时,会保留数据尾部的空格。 VARCHAR类型的字段所占用的存储空间为字符串实际长度加1个字节

编码字符字节参考表

编码 \字符一个字母一个中文字母标点中文标点
ASCII码1字节
UTF-8编码1字节3字节1字节3字节
Unicode编码2字节2字节(Unicode扩展区的一些汉字存储需要4个字节)2字节2字节
GB 2312 编码或 GBK 编码1字节2字节1字节2字节
UTF-162字节2字节2字节2字节
utf8mb41字节3字节1字节3字节
UTF-324字节4字节4字节4字节
latin11字节1字节

utf8mb4兼容utf8,存储补充字符(如emoji)时需要4个字节

utf8mb4


参考资料:

  1. MySQL 数据类型中长度的含义
  2. MySQL varchar字符长度的计算

http://chatgpt.dhexx.cn/article/YT0chbgQ.shtml

相关文章

Mysql数据类型与选择规则(mysql5.7)

概述 基于mysql5.7。 mysql数据类型大致可以分为四类&#xff1a;数值型、字符串型、日期和时间类型、空间类型。常用的如数值型的tinyint、int、bigint,字符串型的char、varchar、text&#xff0c;日期型的date、datetime、timestemp等&#xff0c;详细见下图&#xff1a; …

Mysql数据类型详解

1、整数类型&#xff0c;包括TINYINT、SMALLINT、MEDIUMINT、INT、BIGINT&#xff0c;分别表示1字节、2字节、3字节、4字节、8字节整数。 任何整数类型都可以加上UNSIGNED属性&#xff0c;表示数据是无符号的&#xff0c;即非负整数。 长度&#xff1a;整数类型可以被指定长度…

mysql成绩是什么数据类型_mysql数据类型

1、整型 取值范围如果加了unsigned&#xff0c;则最大值翻倍&#xff0c;如tinyint unsigned的取值范围为(0~256)。 int(m)里的m是表示SELECT查询结果集中的显示宽度&#xff0c;并不影响实际的取值范围&#xff0c;没有影响到显示的宽度&#xff0c;不知道这个m有什么用。 2、…

最全MySQL数据类型详解

一、概述 1、MySQL中的数据类型 2、常见数据类型的属性 二、各种数据类型精讲 1、整数类型 1.1 整数类型介绍 整数类型一共有 5 种&#xff0c;包括 TINYINT、SMALLINT、MEDIUMINT、INT&#xff08;INTEGER&#xff09;和 BIGINT。它们的区别如下表所示&#xff1a; 1.2…

mysql住址数据类型_MySql数据类型

MySQL中定义数据字段的类型对你数据库的优化是非常重要的。 MySQL支持多种类型&#xff0c;大致可以分为三类&#xff1a;数值、日期/时间和字符串(字符)类型。 数值类型 MySQL支持所有标准SQL数值数据类型。 这些类型包括严格数值数据类型(INTEGER、SMALLINT、DECIMAL和NUMERI…

不全?MySQL数据类型精讲,定点日期枚举文本字符串,json二进制,空间,选择建议,完整详细可收藏

文章目录 1. MySQL中的数据类型2. 整数类型3. 浮点数类型4. 定点数类型5. 位类型&#xff1a;BIT6. 日期与时间类型7. 文本字符串类型8. ENUM类型9. SET类型10. 二进制字符串类型11. JSON 类型12. 空间类型13. 选择建议 1. MySQL中的数据类型 常见数据类型的属性&#xff0c;如…

MySQL的10种常用数据类型

MySQL的数据类型 常用的数据类型有&#xff1a; 整型&#xff08;xxxint&#xff09;位类型(bit)浮点型&#xff08;float和double、real&#xff09;定点数&#xff08;decimal,numeric&#xff09;日期时间类型&#xff08;date,time,datetime,year&#xff09;字符串&…

定点数除法

定点数除法 一&#xff0c;手工除法运算方法二&#xff0c;原码除法运算方法三&#xff0c;原码加/减交替除法运算方法&#xff08;不恢复余数法&#xff09;四&#xff0c;原码加/减交替除法实现逻辑五&#xff0c;阵列除法 一&#xff0c;手工除法运算方法 图 1 图1 图1 二&…

浮点数与定点数理解、定点数转浮点数相互转换

1、浮点数理解 在平常的代码编写中大家经常用到float 32、double 64等&#xff0c;但是否有深入的去了解一下这类数据是怎么表示的呢&#xff1f;今天我们就去学习浮点数的表示方法&#xff0c;以及其优缺点。 首先浮点数为什么叫浮点数呢&#xff1f;因为浮点数的小数点的位…

定点数的几种表示形式

第二章 数制与编码 2.1 进制之间的转换 掌握&#xff1a;二进制、八进制、十六进制(末位加H表示)、十进制及彼此之间的转换&#xff1b; 问&#xff1a;小数怎么转换&#xff1f; 十进制转二进制&#xff1a;乘以权值再累加&#xff0c;如小数点后第一位的权值是2^(-1) 二进…

计算机中定点数表示方法练习

1【单选题】针对8位二进制数,下列说法中正确的是 。&#xff08;5.0分&#xff09; A、-127的补码为10000000 B、-127的反码等于0的移码 C、1的移码等于-127的反码 D、0的补码等于-1的反码 正确答案&#xff1a; B 2【单选题】若某数x的真值为-0.1010,在计算机中该数表示为1.0…

定点数的表示和运算

本文主要介绍以下几方面知识&#xff1a; 定点数的表示&#xff08;无符号数、有符号数&#xff09;移位运算&#xff08;原码、反码、补码&#xff09;加减运算&#xff08;原码加减、补码加减&#xff09;乘法运算&#xff08;原码乘法、补码乘法&#xff09;除法运算&#x…

进制以及浮点数和定点数

文章目录 一&#xff0c;进制&#xff08;1&#xff09;全国各地最熟悉也最习惯的进制--十进制数1.十进制2.基数3.十进制数的权位展开式4.十进制权位展开式的理解5.十进制对于计算机的局限 &#xff08;2&#xff09;计算机所能理解的进制--二进制数1.二进制2.数据存储3.常见信…

定点数的乘除运算

定点数的乘除运算 定点数的乘法运算原码一位乘法手算模拟补码一位乘法&#xff08;Booth算法&#xff09; 定点数的除法法运算原码除法运算恢复余数法不恢复余数法 补码除法运算&#xff08;加减交替法&#xff09;总结 定点数的乘法运算 在计算机中&#xff0c;乘法运算由累加…

定点数的加减法

文章目录 1.补码加法1.1 补码加法公式1.2 补码加法公式证明 2.补码减法3.溢出概念与检测方法3.1 溢出的概念3.2 溢出的检测方法 参考文献 数值运算的核心是指加、减、乘、除四则算术。由于计算机中的数有定点和浮点两种表示形式&#xff0c;因此相应有定点数的运算和浮点数的运…

定点数类型

正因为用浮点数表示小数可能会有不精确的情况&#xff0c;在一些情况下我们必须保证小数是精确的&#xff0c;所以设计MySQL的大叔们提出一种称之为定点数的数据类型&#xff0c;它也是存储小数的一种方式&#xff1a; 其中&#xff1a; M表示该小数最多需要的十进制有效数字个…

定点数的表示

计算机中常用的数据表示格式有两种&#xff0c;一是定点格式&#xff0c;二是浮点格式。所谓定点数和浮点数&#xff0c;是指在计算机中一个数的小数点的位置是固定的还是浮动的&#xff1a;如果一个数中小数点的位置是固定的&#xff0c;则为定点数&#xff1b;如果一个数中小…

定点数运算

reference: http://wenku.baidu.com/link?urlnUzHmqrtKkQ4fOfUb2SW7hBEGS47wlJEw1DS6uW3U3onryAWk-XWlkLHwd3tKbxhoFYDzeDEd3cjYr5ww-MKgpTP_lNYLkjwpXuatw11ply 原补码关系,参考&#xff1a;http://blog.csdn.net/limanjihe/article/details/52440638 补码的设计目的:   …

定点数的表示方法

文章目录 1.定点数的表示形式2.定点数的原码、反码与补码3.定点小数注意事项参考文献 计算机中数值的表示有两种形式&#xff0c;一是定点数&#xff08;Fixed-point Number&#xff09;&#xff0c;二是浮点数&#xff08;Floating-point Number&#xff09;。 1.定点数的表示…

定点数(fixed-point number)的运算

定点数的运算 1. 定点数2. 定点数加减运算3. 定点数加减运算的溢出判断3.1 用一位符号位判断溢出3.2 用两位符号位判断溢出3.3 最高位和次高位判断溢出 4. 乘法运算4.1 分析笔算乘法4.2 笔算乘法的改进4.3 图示4.4 硬件配置4.5 表格示意图 5. 除法运算5.1 分析笔算除法5.2 笔算…