文档章节

mysql 精确到毫秒

EasonW
 EasonW
发布于 2016/07/14 18:45
字数 953
阅读 58
收藏 0
点赞 0
评论 0

现在很多团队在做去o的项目,迁移mysql时,为了便于binlog分析,请务必对每张表都增加ts字段。

条件:mysql5.6

My.cnf中修改参数

explicit_defaults_for_timestamp = 0

 

且该字段需要精确到毫秒,而now()函数是不支持毫秒的

 

且建表时,只设置ts字段为timstamp类型,其他时间字段请用datetime类型,mysql只允许第一个timestamp类型的字段可以精确到毫秒。

 

由此,需要建表的时候这样定义字段:

create table presort_test(id int,ts timestamp(6) not null);

 

然后在insert时不需要给ts字段赋值:

insert into presort_test(id) values(3); 

 

 

另外关于datetime & timestamp的区别如下:

datetime 
1. 占用8个字节 
2. 允许为空值,可以自定义值,系统不会自动修改其值。 
3. 实际格式储存(Just stores what you have stored and retrieves the same thing which you have stored.) 
4. 与时区无关(It has nothing to deal with the TIMEZONE and Conversion.) 
5. 不可以设定默认值,所以在不允许为空值的情况下,必须手动指定datetime字段的值才可以成功插入数据。 
6. 可以在指定datetime字段的值的时候使用now()变量来自动插入系统的当前时间。 

timestamp 
1. 占用4个字节 
2. 允许为空值,但是不可以自定义值,所以为空值时没有任何意义。 
3. TIMESTAMP值不能早于1970或晚于2037。这说明一个日期,例如'1968-01-01',虽然对于DATETIME或DATE值是有效的,但对于TIMESTAMP值却无效,如果分配给这样一个对象将被转换为0。 
4.值以UTC格式保存( it stores the number of milliseconds) 
5.时区转化 ,存储时对当前的时区进行转换,检索时再转换回当前的时区。 
6. 默认值为CURRENT_TIMESTAMP(),其实也就是当前的系统时间。

 

 

请大家建表时注意,以下是我做测试的代码,给大家参考:

 

[root@PT-17089 bin]# mysql -u root -p 
Enter password: 
Welcome to the MySQL monitor. Commands end with ; or \g. 
Your MySQL connection id is 2125755 
Server version: 5.6.16-log MySQL Community Server (GPL) 

Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved. 

Oracle is a registered trademark of Oracle Corporation and/or its 
affiliates. Other names may be trademarks of their respective 
owners. 

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. 

mysql> use test 
Database changed 

mysql> create table presort_test(id int,ts timestamp(6) not null); 
Query OK, 0 rows affected (0.02 sec) 

mysql> insert into presort_test values(1,now()); 
Query OK, 1 row affected (0.00 sec) 

mysql> select * from presort_test \G; 
*************************** 1. row *************************** 
id: 1 
ts: 2016-07-14 18:06:35.000000 
1 row in set (0.00 sec) 

ERROR: 
No query specified 

mysql> insert into presort_test values(2,now()); 
Query OK, 1 row affected (0.00 sec) 

mysql> select * from presort_test \G; 
*************************** 1. row *************************** 
id: 1 
ts: 2016-07-14 18:06:35.000000 
*************************** 2. row *************************** 
id: 2 
ts: 2016-07-14 18:16:17.000000 
2 rows in set (0.00 sec) 

mysql> insert into presort_test(id) values(3); 
Query OK, 1 row affected (0.00 sec) 

mysql> select * from presort_test 
-> ; 
+------+----------------------------+ 
| id | ts | 
+------+----------------------------+ 
| 1 | 2016-07-14 18:06:35.000000 | 
| 2 | 2016-07-14 18:16:17.000000 | 
| 3 | 2016-07-14 18:23:19.562072 | 
+------+----------------------------+ 
3 rows in set (0.00 sec) 

mysql> insert into presort_test(id) values(4); 
Query OK, 1 row affected (0.00 sec) 

mysql> select * from presort_test; 
+------+----------------------------+ 
| id | ts | 
+------+----------------------------+ 
| 1 | 2016-07-14 18:06:35.000000 | 
| 2 | 2016-07-14 18:16:17.000000 | 
| 3 | 2016-07-14 18:23:19.562072 | 
| 4 | 2016-07-14 18:25:08.529071 | 
+------+----------------------------+ 
4 rows in set (0.00 sec)

 

 

--------------------------------------------------------------------------------------

只设置ts字段为timstamp类型,其他时间字段请用datetime类型,mysql只允许第一个timestamp类型的字段可以精确到毫秒。

 

mysql> alter table presort_test add column ts1 timestamp(6) not null; 
Query OK, 0 rows affected (0.02 sec) 
Records: 0 Duplicates: 0 Warnings: 0

 

mysql> insert into presort_test(id) values(5); 
Query OK, 1 row affected (0.00 sec)

 

mysql> select * from presort_test; 
+------+----------------------------+----------------------------+ 
| id | ts | ts1 | 
+------+----------------------------+----------------------------+ 
| 1 | 2016-07-14 18:06:35.000000 | 0000-00-00 00:00:00.000000 | 
| 2 | 2016-07-14 18:16:17.000000 | 0000-00-00 00:00:00.000000 | 
| 3 | 2016-07-14 18:23:19.562072 | 0000-00-00 00:00:00.000000 | 
| 4 | 2016-07-14 18:25:08.529071 | 0000-00-00 00:00:00.000000 | 
| 5 | 2016-07-14 18:35:29.702059 | 0000-00-00 00:00:00.000000 | 
+------+----------------------------+----------------------------+ 
5 rows in set (0.00 sec)

© 著作权归作者所有

共有 人打赏支持
EasonW
粉丝 1
博文 1
码字总数 953
作品 0
大兴
项目经理
mysql 以天为单位 统计订单数量

SELECT count(*) as num, dateformat(FROMUNIXTIME(createDate/1000),'%y-%m-%d') sdate from carorder c GROUP BY sdate 注意:如果我们存放的字段createDate 是精确到毫秒的,那么在转化成......

岸芷汀兰 ⋅ 2015/07/04 ⋅ 0

全局唯一ID生成服务--snowflake-PHP

Twitter在把存储系统从MySQL迁移到Cassandra的过程中由于Cassandra没有顺序ID生成机制,于是自己开发了一套全局唯一ID生成服务:Snowflake。 1 41位的时间序列(精确到毫秒,41位的长度可以使...

zhouyuan24 ⋅ 2013/11/19 ⋅ 0

系统开发中的时间类型的处理问题

这两天做了个测试程序放到cloudfoundry上,测试的时候突然发现系统中对日期时间类型的数据处理在云环境下存在问题。 仔细思考以后发现这个问题是一直存在的,只是以前自己做的系统没有考虑到...

chuangyu ⋅ 2013/05/07 ⋅ 0

分布式自增 ID 算法--Snowflake

Twitter在把存储系统从MySQL迁移到Cassandra的过程中,由于Cassandra没有顺序ID生成机制,于是自己开发了一套全局唯一ID生成服务:Snowflake。优点是:高性能,低延迟;独立的应用;按时间有...

匿名 ⋅ 2016/06/16 ⋅ 5

mysql常用数据类型

mysql常用数据类型 tinyint/smallint/mediumint/int/bigint-->1B/2B/3B/4B/8B float/double-->单精度/双精度浮点型 decimal-->不会产生精度丢失的单精度/双精度浮点型 date-->日期类型 time......

chenruibing ⋅ 2015/06/15 ⋅ 0

MySQL数据库表设计最佳实践——《高性能MySQL》第三版第四章学习笔记

1.选择合适的数据类型 MySQL的表是由多个字段组成的,那字段的类型改如何选择才更优呢? 1.1通用原则 1.1.1尽可能小 怎么做? 在满足业务需求的前提下,适当考虑20%的富余量,选择尽可能小的...

杨武兵 ⋅ 2015/10/01 ⋅ 3

oracle中如何增加多少毫秒

遇到一个问题,我们有个程序设定为需要每隔2秒钟才能访问,在oracle中做了一个限制,加一个时间戳,精确到毫秒,使用的是timestamp类型存储,原来的逻辑是timestamp+2/24/60/60,结果我今天发...

menxin ⋅ 2015/06/05 ⋅ 3

电商中应该使用秒还是毫秒

看了淘宝的双11,我们这些码畜简直自愧不如,可是程序员这条道路还是得继续啊,还是需要努力学习,所以还是慢慢记录自己做电商中遇到的问题吧。 由于最近在最近的秒杀活动中,发现几个整点订...

卖小女孩的小火柴 ⋅ 2015/11/14 ⋅ 0

如何在mysql中优雅的解决精确到毫秒的问题?

刚刚搞定,不需要两个字段了。mysql5.6.4以后的版本,支持定义time(3)或者timestamp(6)这样的字段,然后使用 current_timestamp(6) 即可以为该字段赋值带有毫秒或微秒值的时间数据了! 发布于...

huluobotx ⋅ 2015/09/21 ⋅ 0

MyBatis 3实现时间段精确的查询(转)

效果如下: 说明: 时间范围的查询会存在以下问题: 1、如果单纯采用年月日的形式会出现缺少最后一点的数据,比如要查询2015-09-16到2015-09-17,那么2015-09-17 01:00:00的数据不会被查询出...

easonjim ⋅ 2017/09/13 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Qt中的坑--QTreeWidget添加item 不能显示出来

QTreeWidget* pTree = ui.TreeCheckList; QTreeWidgetItem* item = new QTreeWidgetItem(pTree) ;item->setText ( 0, "test" );pTree->addTopLevelItem (item ); 原因是因为创建一个......

k91191 ⋅ 16分钟前 ⋅ 0

使用Guava的RateLimiter做限流

场景: 1. 在日常生活中,我们肯定收到过不少不少这样的短信,“京东最新优惠卷…”,“天猫送您…”。这种类型的短信是属于推广性质的短信。这种短信一般群发量会到千万级别。然而,要完成这...

wind2012 ⋅ 16分钟前 ⋅ 0

QSlider重新enterEvent

#ifndef DIALOG_H#define DIALOG_H#include <QDialog>namespace Ui {class Dialog;}class Dialog : public QDialog{ Q_OBJECTpublic: explicit Dialog(QW......

xxdd ⋅ 17分钟前 ⋅ 0

生产环境redis备份与恢复

生产环境redis备份与恢复 Tyrant0532 0人评论 1563人阅读 2018-02-01 20:34:10 redis是一个开源(BSD许可),内存存储的数据结构服务器,可用作数据库,高速缓存和消息队列代理。生产中我们主...

rootliu ⋅ 19分钟前 ⋅ 0

nginx中出现403forbidden错误

nginx “403 Forbidden” 错误 出现这个错误一般是因为以下原因: 网站禁止特定的用户访问所有内容,例:网站屏蔽某个ip访问。 访问禁止目录浏览的目录,例:设置autoindex off后访问目录。 ...

河图再现 ⋅ 20分钟前 ⋅ 0

上海云栖:金融政企行业的CDN最佳实践

摘要: 在刚刚结束的上海云栖大会飞天技术汇分论坛上,阿里云视频云产品架构师罗小飞进行了《阿里云CDN——面向金融政企的CDN最佳实践》主题分享,为上海的嘉宾介绍CDN的解决方案与技术服务体...

猫耳m ⋅ 25分钟前 ⋅ 0

docker 基本操作

docker介绍 Docker项目提供了构建在Linux内核功能之上,协同在一起的的高级工具。其目标是帮助开发和运维人员更容易地跨系统跨主机交付应用程序和他们的依赖。Docker通过Docker容器,一个安全...

haoyuehong ⋅ 26分钟前 ⋅ 0

上海云栖:金融政企行业的CDN最佳实践

摘要: 在刚刚结束的上海云栖大会飞天技术汇分论坛上,阿里云视频云产品架构师罗小飞进行了《阿里云CDN——面向金融政企的CDN最佳实践》主题分享,为上海的嘉宾介绍CDN的解决方案与技术服务体...

阿里云云栖社区 ⋅ 28分钟前 ⋅ 0

安装与配置hadoop

一、CentOS7安装 java8,参考centos7.0 安装java1.8,tomcat 二、安装hadoop 版本V3.03 1、下载并解压hadoop # mkdir /usr/local/app# mkdir /usr/local/app/hadoop# cd /usr/local/app/had......

iturtle ⋅ 30分钟前 ⋅ 0

Idea设置Serializable自动生成

File --> Settings --> Editor --> Inspections ->Serialization issues,在该项下找到“Serializable class without 'serialVersionUID' ”并勾选...

Gmupload ⋅ 33分钟前 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部