mysql占用多大的存储空间?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql占用多大的存储空间?相关的知识,希望对你有一定的参考价值。

create table person4all(
id int not null auto_increment,
name varchar(30) not null,
gender varchar(10) not null ,
primary key(id)
);
insert into person4all(name,gender) values("zhaoming","male");
insert into person4all(name,gender) values("wenwen","female");
插入这两条数据会占用多大的空间?
我是这样算的:
4+1+1+1=7
7x2=14
即占用14KB的存储空间。这样对不对!

  mysql的程序一共几十兆。跟其他数据库一样,需要占有多少空间要看数据库内容的大小。
  如果想知道MySQL数据库中每个表占用的空间、表记录的行数的话,可以打开MySQL的 information_schema 数据库。在该库中有一个 TABLES 表,这个表主要字段分别是:
  TABLE_SCHEMA : 数据库名
  TABLE_NAME:表名
  ENGINE:所使用的存储引擎
  TABLES_ROWS:记录数
  DATA_LENGTH:数据大小
  INDEX_LENGTH:索引大小
  所以要知道一个表占用空间的大小,那就相当于是 数据大小 + 索引大小 即可。
参考技术A int 占 4个字节
varchar(30) 值为'zhaoming'的话,占8+1个字节;为'wenwen' 占6+1个字节,其中的1个字节用来保存varchar类型值的长度
同理,'male'占5个字节,'female'占7个字节
剩下的你自己算吧本回答被提问者采纳

mysql 数值与字符类型 长度梳理

上述表格中的数值类型都是定长的,也就是说,无论你存的数值是多少,多大或者多小,占用的存储字节大小都是固定的。例如,设置int(1),虽然M值是1个字符,但是它所占用的空间大小永远都是4个字节的大小,换句话说就是,你可以存入有符号整型从-2 147 483 648到2 147 483 647包括这两个数的中间任何一个数。int(1)和int(11)占用的是4个字节,可以存入上述这些数,tinyint(1)和tinyint(4)占用的是1个字节,可以存入从-128到127的数。

设置tinyint(m),int(m)这个指示最大显示宽度,最大有效显示宽度是255。显示宽度与存储大小或类型包含的值的范围无关。

该可选显示宽度规定用于显示宽度小于指定的列宽度的值时从左侧填满宽度。

显示宽度并不限制可以在列内保存的值的范围,也不限制超过列的指定宽度的值的显示。

但是这个值只有在设置zerofill(表示用0填充)属性时才有作用。例如我们设置tinyint(2),勾选zerofill属性,当插入1时,我们查出来的数据会显示为 01;就是当值的字符数不足m个时,左边位置会通过补0来凑足m位。

如果为一个数值列指定ZEROFILL,MySQL自动为该列添加UNSIGNED属性。

需要强调的是,不同的数据类型中的M值意义是不一样的

结论:

1、数值类型已经限制了取值范围,有符号整型和无符号整型都有,而M值并不代表可以存储的数值字符长度,它代表的是数据在显示时显示的最小宽度;

2、当存储的字符长度超过M值时,没有任何的影响,只要不超过数值类型限制的范围;

3、当存储的字符长度小于M值时,只有在设置了zerofill用0来填充,才能够看到效果,换句话就是说,没有zerofill,M值就是无用的。

 

 

而char(m).varchar(m)里面的m跟数值类型的意义又不一样

CHAR(M)

  固定长度字符串,当保存时在右侧填充空格以达到指定的长度。M表示列长度。M的范围是0到255个字符。当检索CHAR值时尾部空格被删除。

如果想要将某个CHAR的长度设为大于255,执行的CREATE TABLE或ALTER TABLE语句将失败并提示错误:

mysql> CREATE TABLE c1 (col1 INT, col2 CHAR(500));

ERROR 1074 (42000): Column length too big for column \'col\' (max = 255); use BLOB or TEXT instead

VARCHAR(M)
  变长字符串。M 表示最大列长度。M的范围是0到65,535。(VARCHAR的最大实际长度由最长的行的大小和使用的字符集确定。最大有效长度是65,532字节)。

VARCHAR保存时用一个字节或两个字节长的前缀+数据。如果VARCHAR列声明的长度大于255,长度前缀是两个字节。

char(4) 存储需求 varchar(4) 存储需求
\'\' \'    \' 4个字节 \'\' 1个字节
\'ab\' \'ab  \' 4个字节 \'ab\' 3个字节
\'abcd\' \'abcd\' 4个字节 \'abcd\' 5个字节
\'abcdefgh\' \'abcd\' 4个字节 \'abcd\' 5个字节

 

 

char是一种固定长度的类型,varchar则是一种可变长度的类型,它们的区别是: char(M)类型的数据列里,每个值都占用M个字节,如果某个长度小于M,MySQL就会在它的右边用空格字符补足.(在检索操作中那些填补出来的空格字符将被去掉)在varchar(M)类型的数据列里,每个值只占用刚好够用的字节再加上一个用来记录其长度的字节(即总长度为L+1字节)。

在表结构定义中声明char和varchar类型时,必须指定字符串的长度.也就是该列所能存储多少个字符(不是字节,是字符).例如:char(10)和varchar(10)都能存储10个字符.

存储固定长度的字符,根据编码方式不一样占据的字节也不一样,通过LENGTH()可以返回字符串所占用的字节数,通过CHAR_LENGTH()返回字符串中的字符数。

①ASCII码中,一个英文字母(不分大小写)占一个字节的空间,一个中文汉字占两个字节的空间。一个二进制数字序列,在计算机中作为一个数字单元,一般为8位二进制数,换算为十进制。最小值0,最大值255。

②UTF-8编码中,一个英文字符等于一个字节,一个中文(含繁体)等于三个字节。

③Unicode编码中,一个英文等于两个字节,一个中文(含繁体)等于两个字节。

文本符号:英文标点占一个字节,中文标点占两个字节。举例:英文句号“.”占1个字节的大小,中文句号“。”占2个字节的大小。

④UTF-16编码中,一个英文字母字符或一个汉字字符存储都需要2个字节(Unicode扩展区的一些汉字存储需要4个字节)。

⑤UTF-32编码中,世界上任何字符的存储都需要4个字节。

 

 

参考资料 :http://www.mysqlab.net/docs/view/refman-5.1-zh/chapter/column-types.html

 

 

 

 

以上是关于mysql占用多大的存储空间?的主要内容,如果未能解决你的问题,请参考以下文章

redis存储session需要多少空间

C语言中变量值在存储单元中占用多大空间与啥有关?

oracle 查询出 表的空间大小 占用存储空间

请问在如下定义中malloc()开辟的空间有多大,其中m[0]=8;m[]1=9;分别占用了多大的空间?

如何在oracle中查询某个表的占用了多大的空间!如果是sql语句请讲的详细子我是菜鸟!

mysql一张表最多能存多少数据