之前的印象中datetime一直是占用8个字节,从来没去关注过是否正确,在解析数据文件的时候,datetime字段后面跟了一个timestamp字段,在解析timestamp时候,总是不对,后来发现是datetime字段解析有问题。datetime字段的存储
1 bit sign (used when on disk) 17 bits year*13+month (year 0-9999, month 0-12) 5 bits day (0-31) 5 bits hour (0-23) 6 bits minute (0-59) 6 bits second (0-59) 24 bits microseconds (0-999999) Total: 64 bits = 8 bytes
如果datetime没有microseconds部分,那么这3个字节是没有的,也就是只占用了5个字节。 测试表
master [localhost] {msandbox} (test) > show create table dba_user6\G
*************************** 1. row ***************************
Table: dba_user6
Create Table: CREATE TABLE `dba_user6` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`username` varchar(100) DEFAULT NULL COMMENT '用户名',
`class` varchar(100) DEFAULT NULL COMMENT 'class',
`account` int(11) DEFAULT NULL,
`version` int(11) DEFAULT NULL,
`ctime` datetime DEFAULT NULL,
`ts` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8 ROW_FORMAT=COMPACT
所以跟开发要讲明白些,datetime没有 microseconds是5个字节,有是8个字节。 不要总是说datetime 占用空间大
