举例子,请问如下表,存储一条数据,占用的数据库空间是多少?
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个字节
参考文献:
更多推荐