MySQL 字段类型占用空间

摘要:
MySQL支持多种列类型:数值类型、日期/时间类型和字符串(字符)类型。)1或2个字节,取决于枚举值的个数SET(‘value1’,’value2’,…)1、2、3、4或者8个字节,取决于set成员的数目上表的M只是为了说明占用空间大小,在实际创建表中char、varchar,20指的是字符而不是字节;那么字符和字节的转换要看字符集,utf-8下,1字符=3字节;gbk下,1字符=2字节。接下来会剖析varchar最大长度和text占用空间问题。

MySQL支持多种列类型:数值类型、日期/时间类型和字符串(字符)类型。
首先来看下各类型的存储需求(即占用空间大小):

数值类型存储需求

列类型存储需求
TINYINT1个字节
SMALLINT2个字节
MEDIUMINT3个字节
INT, INTEGER4个字节
BIGINT8个字节
FLOAT(p)如果0 <= p <= 24为4个字节, 如果25 <= p <= 53为8个字节
FLOAT4个字节
DOUBLE [PRECISION], item REAL4个字节
DECIMAL(M,D), NUMERIC(M,D)变长(0-4个字节)
BIT(M)大约(M+7)/8个字节

int(10)这里的10指的是数值的宽度,并不是字节

日期和时间类型的存储需求

列类型存储需求
DATE3个字节
DATETIME8个字节
TIMESTAMP4个字节
TIME3个字节
YEAR1个字节

字符串类型的存储需求

列类型存储需求
CHAR(M)M个字节,0 <= M <= 255
VARCHAR(M)L+1个字节,其中L <= M 且0 <= M <= 65535
BINARY(M)M个字节,0 <= M <= 255
VARBINARY(M)L+1个字节,其中L <= M 且0 <= M <= 255
TINYBLOB, TINYTEXTL+1个字节,其中L < 28
BLOB, TEXTL+2个字节,其中L < 216
MEDIUMBLOB, MEDIUMTEXTL+3个字节,其中L < 224
LONGBLOB, LONGTEXTL+4个字节,其中L < 232
ENUM(‘value1’,’value2’,…)1或2个字节,取决于枚举值的个数(最多65,535个值)
SET(‘value1’,’value2’,…)1、2、3、4或者8个字节,取决于set成员的数目(最多64个成员)

上表的M只是为了说明占用空间大小,在实际创建表中char(20)、varchar(20),20指的是字符而不是字节(4.0版本以上,以下指的是字节);那么字符和字节的转换要看字符集,utf-8下,1字符=3字节;gbk下,1字符=2字节。

接下来会剖析varchar最大长度和text占用空间问题。

参考来源:https://blog.csdn.net/free_ant/article/details/52936722

免责声明:文章转载自《MySQL 字段类型占用空间》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Dto和Entity如何优雅的相互转换c# Socket心跳试验,自定义发送包 和 使用KeepAlive下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

js正则表达式 URL格式匹配详解

0、URL格式 protocol :// hostname[:port] / path / [;parameters][?query]#fragment [;parameters]没见过 这里就不做相关匹配了 1、代码及运行结果 'use strict'; { // URL地址匹配格式: protocol :// hostname[:port...

oracle数据库date类型和mysql数据库datetime类型匹配

oracle数据库有date类型,但是没有datetime类型 mysql数据库既有date类型也有datetime类型。Oracle数据库的date类型和mysql的date类型是不一样的,Oracle的date类型为YYYY-MM-DD hh:mm:ss和mysql中的datetime类型匹配, 而 mysql 的date类型为 yyyy-mm-dd。...

mysql数据库设置外键,更新与删除选项

CASCADE:父表delete、update的时候,子表会delete、update掉关联记录;SET NULL:父表delete、update的时候,子表会将关联记录的外键字段所在列设为null,所以注意在设计子表时外键不能设为not null;RESTRICT:如果想要删除父表的记录时,而在子表中有关联该父表的记录,则不允许删除父表中的记录;NO A...

为什么文件名不能包含下列任何字符 /:*?“&amp;lt;&amp;gt;|

/ 是路径分割符(Windows的路径分隔符是反斜杠,但处理文件的API接受带正斜杠的路径名)。< > 是输入输出重定向,比如想把foo.exe的输出重定向到文件abc.txt::foo > abc.txt;把anc.txt的内容输入给foo.exe:foo < abc.txt。: 是用来区分盘符,比如C: D:。“ 是用来标记...

数据库模糊搜索时,关键字中有%号,怎么办?

  数据库模糊搜索时,关键字中有%号,怎么办?     数据库模糊搜索时,都知道应该用通配符%号来模糊匹配。如:select *from table where content like '%key%'。但当关键字key中也包含有%号时,应该怎么办?   数据库中有关键字:escape就是用来转换的。使用escape关键字定义转义符时,当转义符置于通配符之...

一个神奇SQL引发的故障【转】

前几天一个客户数据库主实例告警,诊断过程中发现是由一个慢SQL导致的数据库故障,而在排查逐步深入之后却发现这个现象的不可思议。 问题描述 2016年12日09日,大概9点26分左右,一个客户的生产库主实例发出告警,告警信息如下: MySQL实例超过五分钟没有更新。这个告警信息简单解释下就是持续五分钟无法获取该实例的信息。 同时开发人员还反映,从12月09日...