时间字段的选择


关于一些人的选择

  1. datetime
  2. timestamp
  3. int(10)
  4. bigint(13)
  5. 还有人选择用char来存储时间 - -#

时间区间的差别

  1. datetime            时间区间(0000年到9999年)
  2. timestamp          时间区间(1970到2038-01-19 11:14:07)
  3. int(10)                其实就是timestamp的数字版,使用  
                             unix_timestamp 和 from_unixtime 这俩函数进行转换
  4. bigint(13)           精确到毫秒的时间撮
                             Java中也就是 System.currentTimeMillis() ,使用的时候 需要自行转换
  5. char                   char(13),与上面这一条类似

其他方面:

插入效率:datetime > timestamp > int
读取效率:int > timestamp > datetime
储存空间:datetime > timestamp = int 

1.存储类型,char的本质是定长字符串,datetime表现是时间类型,本质是int.
  精度要求相同时,char占用的空间更大.

2.char可以存储时间的长度和精度可以完全由程序决定,datetime则由数据库本身决定.

3.作为索引的查询性能,datetime的存储类型更短,而且为int类型辨识度更高,在where或join时可以有更好的性能。 所以,datetime更节约空间,有更好的查询性能,如果datetime的长度或精度不满足需求,建议存储bigint类型的时间戳,没有必要将时间类型存为char。

参考:
http://www.zhihu.com/question/27097981/answer/35539215

时间: 2024-10-17 02:45:16

时间字段的选择的相关文章

MySQL基于时间字段进行分区的方案总结

MySQL支持的分区类型一共有四种:RANGE,LIST,HASH,KEY.其中,RANGE又可分为原生RANGE和RANGE COLUMNS,LIST分为原生LIST和LIST COLUMNS,HASH分为原生HASH和LINEAR HASH,KEY包含原生KEY和LINEAR HASH.关于这些分区之间的差别,改日另写文章进行阐述. 最近,碰到一个需求,要对表的时间字段(类型:datetime)基于天进行分区.于是遍历MySQL官方文档分区章节,总结如下: 实现方式 主要是以下几种: 1.

六、mysql字段类型选择

1.char类型字段会自动删除字符串后面所带的空格,而varchar不会 2.char比varchar快..... 3.myisam 建议 char类型,memory char跟varchar一样,都作为char类型处理:innodb建议 varchar类型 4.optimize table 清理碎片 text碎片产生实例: create table emp (id tinying(1),content text)engine=myisam; 新建测试表 insert into emp valu

mysql 时间字段的函数 timestamp

Mysql 里格式 时间字段的函数 DATE_FORMAT unix_timestamp - 墨墨修行的日志 - 网易博客http://jjuanxi.blog.163.com/blog/static/175274197201121011310826/

MySQL时间字段究竟使用INT还是DateTime

今天解析DEDECMS时发现deder的MYSQL时间字段,都是用 `senddata` int(10) unsigned NOT NULL DEFAULT '0'; 随后又在网上找到这篇文章,看来如果时间字段有参与运算,用int更好,一来检索时不用在字段上转换运算,直接用于时间比较!二来如下所述效率也更高. 归根结底:用int来代替data类型,更高效. 环境: Windows XP PHP Version 5.2.9 MySQL Server 5.1 第一步.创建一个表date_test(非

解决SQL Server 2005数据库中datetime时间字段在前端显示时分秒的问题

SQL Server 2005中时间类型datetime的格式是"年月日时分秒",直接读出来该字段,为了不让它在前端显示"时分秒"若是显示在dataGridView中,可以修改控件的某一列格式,如: dataGridView1.Columns[10].DefaultCellStyle.Format = "yyyy-MM-dd"; 但是要在listview控件中的话,就有点困难了,貌似没有类似的属性,这样的话,考虑从数据源入手. 1.获取当前年月日

每天进步一点点之SQL 获取表中某个时间字段离当前时间最近的几条

实际中用到的SQL: select * from (select top 3 Id, case when startSignup>GETDATE() then '敬请期待' when (startSignup<GETDATE() and  endsignUp>=getdate()) then '正在报名'  when (StartDate<GETDATE() and EndDate>=GETDATE())or (StartDate<GETDATE() and EndDa

时间字段是否适合建索引

时间字段是否适合建索引 可以建立索引的:至于建立聚集索引或者是非聚集索引,那要看你这个时间字段的具体情况以及使用或变更频繁程度. 一般来说,适合建立聚集索引的要求:“既不能绝大多数都相同,又不能只有极少数相同”的规则. 先说说一个误区:有人认为:只要建立索引就能显著提高查询速度.这个想法是很错误的.建立非聚集索引,确实,一般情况下可以提高速度,但是一般并不会达到你想要的速度.只有在适当的列建立适当的(聚集)索引,才能达到满意的效果. 下面的表总结了何时使用聚集索引或非聚集索引(很重要). 动作描

MySQL 创建表时,设置时间字段自己主动插入当前时间

MySQL 创建表时,设置时间字段自己主动插入当前时间 DROP TABLE IF EXISTS `CONTENT`; CREATE TABLE `CONTENT` ( `ID` char(20) NOT NULL, `CURRENT_TIME` timestamp not null default current_timestamp, PRIMARY KEY (`ID`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

Mysql 升级到 5.6 后插入语句时间字段报错:Incorrect datetime value: &#39;&#39; for column &#39;createtime&#39;

今天部署服务器项目运行,当遇见有时间数据对象的插入和更新操作的时候,就报错,如下: Caused by: com.mysql.jdbc.MysqlDataTruncation: Data truncation: Incorrect datetime value: '' for column 'createtime' at row 1 at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:2868) at com.mysql.jdbc.My