举例子,请问如下表,存储一条数据,占用的数据库空间是多少?

CREATE TABLE `payment_common_info` (
  `id` bigint(20) NOT NULL COMMENT 'id',
  `request_id` varchar(50) NOT NULL COMMENT '请求id',
  `source` tinyint(2) NOT NULL COMMENT '系统来源 1:DADA',
  `business_no` varchar(20) NOT NULL COMMENT '业务单号',
  `uuid` varchar(20) NOT NULL COMMENT '防重单号',
  `name` varchar(20) DEFAULT NULL COMMENT '姓名',
  `phone` varchar(20) DEFAULT NULL COMMENT '手机号',
  `cert_no` varchar(20) DEFAULT NULL COMMENT '身份证号',
  `charge_account_no` varchar(20) DEFAULT NULL COMMENT '收款账户',
  `actual_amount` decimal(16,2) DEFAULT NULL COMMENT '实发金额',
  `settle_amount` decimal(16,2) DEFAULT NULL COMMENT '结算金额',
  `payment_status` tinyint(6) DEFAULT '1' COMMENT '1:成功 2:失败 3:其他',
  `invoice_status` tinyint(2) NOT NULL COMMENT '1.成功 2.红冲 3.作废 4.其他',
  `invoice_date` datetime DEFAULT NULL COMMENT '开票时间',
  `payment_date` datetime DEFAULT NULL COMMENT '发佣时间',
  `create_date` datetime DEFAULT NULL COMMENT '创建时间',
  `update_date` datetime DEFAULT NULL COMMENT '更新时间',
  `valid` tinyint(2) NOT NULL DEFAULT '1' COMMENT '数据有效性 1有效 2无效',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uuid` (`uuid`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COMMENT='发佣信息共有属性表';

1.mysql中的varchar(N)占用多少空间?

varchar(N)里的N是字符数,而不是字节数;字符类型(varchar text blob等)空间=字符实际长度+字段长度。varchar(N)占用的空间:


如果是lantin1字符集时,空间=1N+(1 or 2)bytes,因为lantin1的1个字符占用1个字节,后面加的1或2bytes是用来表示字段长度的,如果超过255个字节,要2个bytes来表示字段长度;
如果是utf8字符集时,空间=3N+(1 or 2)bytes,因为utf8的1个字符占用3个字节,后面加的1或2bytes是用来表示字段长度的。当可能超过255字节时,要2个bytes来表示字段长度。

举个例子:varchar(N)可能超过255字节,字段长度=2;
当varchar(100)字符集为utf8时,’aaaa‘分别占用几个字节?
因为varchar(100)存储中文将占用3*100=300,300 >225个字节,

所以需要2个字节来表示字段长度。’aaaa‘占用的空间=300+2=302bytes

2.mysql中的bigint(M)占用多少空间?

bigint(M)占用8个字节,有符号值:-9223372036854775808 到9223373036854775807(- 2^63到2^63-1)无符号值:0到18446744073709551615(0到2^64 – 1)

3.tinyint(m)占用多少空间?

tinyint(m)占用1字节,有符号值:-128 到127(- 2^7 到2^7 – 1),无符号值:0到255(0 到2^8 – 1)

4.smallint(m)占用多少空间?

smallint(m)占用2字节,有符号值:-32768 到32767(- 2^15 到2^15 – 1),无符号值:0到65535(0 到21 6 – 1)

5.mediumint(m)占用多少空间?

mediumint(m)占用3字节,有符号值:-8388608 到8388607(- 2^23 到2^23 – 1 ),无符号值:0到16777215(0 到2^24 – 1)

6.int(m)占用多少空间?

int(m)占用4字节,有符号值:-2147683648 到2147683647(- 2^31 到2^31- 1),无符号值:0到4294967295(0 到2^32 – 1)

7.float(m,d)占用多少空间?

float(m,d)占用4字节,最小非零值:±1.175494351e – 38

8.double(m,d)占用多少空间?

double(m,d)占用8字节,最小非零值:±2.2250738585072014e – 308

9.decimal (m, d)占用多少空间?

m字节(mysql < 3.23),m+2字节(mysql > 3.23 )

10.日期占用多少空间?

DATE占用4字节,范围1000-01-01——9999-12-31

TIME占用3字节,范围-838:59:59——838:59:59

DATETIME占用8字节,范围1000-01-01 00:00:00——9999-12-31 23:59:59

TIMESTAMP占用4字节,范围19700101080001——20380119111407

YEAR占用1字节,范围1901——2155

11.二进制数据类型占用多少字节?

二进制数据类型:二进制类型可存储任何数据,如文字、图像、多媒体等。

TITYBLOB,最大长度为255字节

BLOB,最大长度为64KB

MEDIUMBLOB,最大长度为16MB

LONGBLOB,最大长度为4GB

参考上述,表payment_common_info存储一条数据所占用的空间=8+(3*50+1)+1+6*(20*3+1)+16*2+1*3+4*8+(8+20*3+1索引占用空间按照索引字段大小算)=662个字节

参考文献:

mysql的索引key_len计算方法,及个字段所占字节数 - Yxh_blogs - 博客园

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐