通常存储时间用datetime类型,现在很多系统也用int存储时间,它们有什么区别?个人更喜欢使用int这样对于日期计算时比较好哦,下面我们一起来看到底那种会好些。

int

().4个字节存储,INT的长度是4个字节,存储空间上比datatime少,int索引存储空间也相对较小,排序和查询效率相对较高一点点
()可读性极差,无法直观的看到数据,可能让你很恼火 TIMESTAMP ()4个字节储存
()值以UTC格式保存
()时区转化 ,存储时对当前的时区进行转换,检索时再转换回当前的时区。
()TIMESTAMP值不能早于1970或晚于2037 datetime ()8个字节储存
()与时区无关 ()以'YYYY-MM-DD HH:MM:SS'格式检索和显示DATETIME值。支持的范围为'1000-01-01 00:00:00'到'9999-12-31 23:59:59' mysql也是这两年才流行,性能越来越来,具体怎么存储看个人习惯和项目需求吧
分享两篇关于int vs timestamp vs datetime性能测试的文章 Myisam:MySQL DATETIME vs TIMESTAMP vs INT 测试仪 CREATE TABLE `test_datetime` (
`id` int() unsigned NOT NULL AUTO_INCREMENT,
`datetime` FIELDTYPE NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM; 机型配置 kip-locking
key_buffer = 128M
max_allowed_packet = 1M
table_cache =
sort_buffer_size = 2M
read_buffer_size = 2M
read_rnd_buffer_size = 8M
myisam_sort_buffer_size = 8M
thread_cache_size =
query_cache_type =
query_cache_size =
thread_concurrency = 测试 DATETIME
TIMESTAMP
INT 执行mysql mysql> select * from test_datetime into outfile ‘/tmp/test_datetime.sql’;
Query OK, rows affected (6.19 sec) mysql> select * from test_timestamp into outfile ‘/tmp/test_timestamp.sql’;
Query OK, rows affected (8.75 sec) mysql> select * from test_int into outfile ‘/tmp/test_int.sql’;
Query OK, rows affected (4.29 sec) alter table test_datetime rename test_int;
alter table test_int add column datetimeint INT NOT NULL;
update test_int set datetimeint = UNIX_TIMESTAMP(datetime);
alter table test_int drop column datetime;
alter table test_int change column datetimeint datetime int not null;
select * from test_int into outfile ‘/tmp/test_int2.sql’;
drop table test_int; So now I have exactly the same timestamps from the DATETIME test, and it will be possible to reuse the originals for TIMESTAMP tests as well. mysql> load data infile ‘/export/home/ntavares/test_datetime.sql’ into table test_datetime;
Query OK, rows affected (41.52 sec)
Records: Deleted: Skipped: Warnings: mysql> load data infile ‘/export/home/ntavares/test_datetime.sql’ into table test_timestamp;
Query OK, rows affected, warnings (48.32 sec)
Records: Deleted: Skipped: Warnings: mysql> load data infile ‘/export/home/ntavares/test_int2.sql’ into table test_int;
Query OK, rows affected (37.73 sec)
Records: Deleted: Skipped: Warnings: As expected, since INT is simply stored as is while the others have to be recalculated. Notice how TIMESTAMP still performs worse, even though uses half of DATETIME storage size. Let’s check the performance of full table scan: mysql> SELECT SQL_NO_CACHE count(id) FROM test_datetime WHERE datetime > ‘-- ::′ AND datetime < ‘-- ::′;
+———–+
| count(id) |
+———–+
| |
+———–+
row in set (3.93 sec) mysql> SELECT SQL_NO_CACHE count(id) FROM test_timestamp WHERE datetime > ‘-- ::′ AND datetime < ‘-- ::′;
+———–+
| count(id) |
+———–+
| |
+———–+
row in set (9.87 sec) mysql> SELECT SQL_NO_CACHE count(id) FROM test_int WHERE datetime > UNIX_TIMESTAMP(’-- ::′) AND datetime < UNIX_TIMESTAMP(’-- ::′);
+———–+
| count(id) |
+———–+
| |
+———–+
row in set (15.12 sec) Then again, TIMESTAMP performs worse and the recalculations seemed to impact, so the next good thing to test seemed to be without those recalculations: find the equivalents of those UNIX_TIMESTAMP() values, and use them instead: mysql> select UNIX_TIMESTAMP(’-- ::′) AS lower, UNIX_TIMESTAMP(’-- ::′) AS bigger;
+——-+——–+
| lower | bigger |
+——-+——–+
| | |
+——-+——–+
row in set (0.00 sec) mysql> SELECT SQL_NO_CACHE count(id) FROM test_int WHERE datetime > AND datetime < ;
+———–+
| count(id) |
+———–+
| |
+———–+
row in set (1.94 sec)

Mysql存储日期类型用int、timestamp还是datetime?的更多相关文章

  1. MySQL各种日期类型与整型(转)

    日期类型 存储空间 日期格式 日期范围 datetime 8 bytes YYYY-MM-DD HH:MM:SS 1000-01-01 00:00:00 ~ 9999-12-31 23:59:59 t ...

  2. 07、MySQL—时间日期类型

    时间日期类型 1.Date 日期类型:系统使用三个字节来存储数据,对应的格式为:YYYY-mm-dd,能表示的范围是从1000-01-01 到9999-12-12,初始值为0000-00-00 2.T ...

  3. Java中日期类型和mysql中日期类型进行整合

      1. java与mysql中日期.时间类型总结: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 mysql(版本:5.1.50)的时间日期类型如下:   da ...

  4. MySQL 的日期类型有5个,分别是: date、time、year、datetime、timestamp。

    类型 字节 格式 用途 是否支持设置系统默认值 date 3 YYYY-MM-DD 日期值 不支持 time 3 HH:MM:SS 时间值或持续时间 不支持 year 1 YYYY 年份 不支持 da ...

  5. MySQL的日期类型

    -- MySQL 中有多种数据类型可以用于日期和时间的表示,不同的版本可能有所差异,表 3-2 中-- 列出了 MySQL 5.0 中所支持的日期和时间类型.-- 表 3-2 MySQL 中的日期和时 ...

  6. Mysql 中日期类型bigint和datetime互转

    MySql数据库中字段类型bigint 长度是10位的 mysql> select (from_unixtime(1554047999))as datatime;+--------------- ...

  7. mysql date and time type ---- mysql 时间&日期 类型详解

    mysql 中支持用多种方式来表示时间与日期 一.mysql 中能表示时间与日期的数据类型: 1.表示年 ) -- 最好不要用这个数据类型.对于年份的取值中有[1901 --> 2155] + ...

  8. mysql基础 日期类型

  9. mysql的日期存储字段比较int,datetime,timestamp区别

    1.首先是我们分析datetime长度是8个字节,INT的长度是4个字节,存储空间上比datatime少. 2.int存储索引的空间也比datetime少,排序效率高,查询速度比较快. 3.方便计算, ...

随机推荐

  1. K2 BPM医疗行业EMS解决方案

    EMS,即Event Management System,K2医疗行业EMS解决方案包括四方面的内容. 详情链接:http://www.k2software.cn/zh-hans/ems-soluti ...

  2. vim的编码设置

    VIM的相关字符编码主要有三个参数 fencs: 它是一个编码格式的猜测列表.当用vim打开某个文件时,会依次取这里面的编码进行解码,如果某个编码格式从头至尾解码正确,那么就用那个编码 fenc:它是 ...

  3. 创建条形码图像易用的控制字符编码功能的条形码控件Native Crystal Reports Barcode Generator

    Native Crystal Reports Barcode Generator是一个对象,它可以很容易地被嵌入到一个Crystal Report中用于创建条形码图像.一旦此条形码被安装在一个报表中, ...

  4. iOS之沙盒机制和如何获取沙盒路径

    iOS APP可以在自己的沙盒里读写文件,但是,不可以访问其他APP的沙盒.每一个APP都是一个信息孤岛,相互是不可以进行通信的,唯独可以通过URL Scheme.沙盒里面的文件可以是照片.声音文件. ...

  5. IOS开发中--点击imageView上的Button没有任何反应

    点击imageView上的Button没有任何反应:    解决方法:设置图片的userInteractionEnabled为YES,使该imageView可以与用户进行交互

  6. ODI 12.1.3创建standalone代理

    首先要安装ODI. ODI安装 如果没有安装WLS,则可以选择独立安装,如下图.

  7. 程序中double类型的数输出为什么要用lf

    在c89和c++中double的输入和输入输出都用%lf 在c99中,double的输出必须用%f,而输入要用%lf oIER一般使用c++,所以输出直接%lf即可.

  8. H5+app前端后台ajax交互总结

    流应用开发 1.前端是HBuilder 编写的html页面,UI控件用MUI: 2.后台用Eclipse开发的Servlet做控制器: 3.前后台交互用MUI的Ajax. 在Hbuilder中选择在安 ...

  9. ModelFirst的CRUD

    创建实体:

  10. HDU 4869 (递推 组合数取模)

    Problem Turn the pokers (HDU 4869) 题目大意 有m张牌,全为正面朝上.进行n次操作,每次可以将任意ai张反面,询问n次操作可能的状态数. 解题分析 记正面朝上为1,朝 ...