Mysql中timestamp应用详解版权声明
原创前言:时间戳(timestamp),a, 完整的、 可验证数据,通常是唯一标识某一时刻的一系列字符。使用数字签名技术生成的数据, 签名的对象包括原始文件信息, 签名参数, 签名时间等信息。广泛用于知识产权保护, 合同签字, 金融账户, 电子报价投标, 股票交易等。
一、MySQL表示当前时间的方法:
CURRENT_TIMESTAMP
CURRENT_TIMESTAMP()
NOW()
LOCALTIME
LOCALTIME()
LOCALTIMESTAMP
LOCALTIMESTAMP()
二、关于TIMESTAMP和DATETIME的比较
完整的日期格式如下:YYYY-MM-DD HH:MM:SS[.fraction],可分为两部分:date部分和time部分,其中,date部分对应于“YYYY-MM-DD”,time部分对应于“HH:MM:SS[.fraction]”。对于date字段,它只支持date零件,如果插入time部分内容,它将丢弃部分内容,并提示a。warning。
如下:
mysql> create table test(id int,hiredate date); Query OK, 0 rows affected (0.01 sec)
mysql> insert into test values(1,20180109000000); Query OK, 1 row affected (0.00 sec)
mysql> insert into test values(1,20180109104400); Query OK, 1 row affected, 1 warning (0.01 sec)
mysql> show warning; ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near warning at line 1 mysql> select * from test; +------+------------+ | id | update | +------+------------+ | 1 | 2018-1-09| | 2 | 2018-1-09| +------+------------+ 2 rows in set (0.00 sec)
注意:第一个没有提示warning原因在于time部分都是0
datetime
-
占用8个字节
-
允许为空值,可以自定义。系统不会自动修改其值。
-
实际格式存储(Just stores what you have stored and retrieves the same thing which you have stored.)
-
与时区无关(It has nothing to deal with the TIMEZONE and Conversion.)
-
可以在中指定datetime使用字段的值。now()变量自动插入系统的当前时间。
结论:datetime该类型适合用于记录数据的原始创建时间,因为无论您如何更改记录中其他字段的值,datetime除非手动更改,否则字段的值不会更改。
timestamp
-
占用4个字节
-
允许空值,但不允许自定义值,因此空是没有意义的。
-
TIMESTAMP值不能早于1970或晚于2037。这表示日期,例如。1968-01-01虽然DATETIME或DATE值有效,但TIMESTAMP该值无效,如果分配给这样的对象,将被转换。0。
4.值以UTC格式化保存( it stores the number of milliseconds)
5.时区转化 ,存储时转换当前时区,检索时转换回当前时区。
-
默认值为CURRENT_TIMESTAMP(),实际上是当前系统时间。
-
数据库会自动修改其值,因此在插入记录时不需要指定该值。timestamp字段名称和timestamp字段的值,在设计表时只需要添加一个。timestamp插入后,字段值将自动更改为当前系统时间。
-
默认情况下,当稍后修改表中的记录时,相应的记录timestamp该值将自动更新为当前系统时间。
-
必要时可设置timestamp不自动更新。通过设置DEFAULT CURRENT_TIMESTAMP 可以实现。
TIMESTAMP和DATETIME同一点:
两者都可以用来表示YYYY-MM-DD HH:MM:SS[.fraction]类型的日期。
TIMESTAMP和DATETIME不同点:
两者以不同的方式存储。
对于TIMESTAMP,它将客户端从当前时区插入的时间进行转换。UTC(世界标准时间)存储。查询时,它将转换为客户端的当前时区以供返回。
而对于DATETIME,基本上不做任何更改,就像输入和输出一样。
两者可以存储不同的时间范围。
timestamp可存储的时间范围为:1970-01-01 00:00:01.000000 到 2038-01-19 03:14:07.999999。
datetime可存储的时间范围为:1000-01-01 00:00:00.000000 到 9999-12-31 23:59:59.999999。
TIMESTAMP的变体
1,TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
创建新记录和修改现有记录时,将刷新此数据列。
2,TIMESTAMP DEFAULT CURRENT_TIMESTAMP
创建新记录时将此字段设置为当前时间,但以后修改时不要刷新。
3,TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
创建新记录时将此字段设置为。0,稍后修改时刷新。
4,TIMESTAMP DEFAULT ‘yyyy-mm-dd hh:mm:ss’ ON UPDATE CURRENT_TIMESTAMP
创建新记录时将此字段设置为。给定值,稍后修改时刷新。
指定日期值时,请注意某些缺陷:
1,允许将值指定为字符串的松散格式被欺骗。例如,由于“:“分离器的品牌。
用,值10:11:12它可能看起来像时间值,但如果在日期中使用,上下文将是
对于解释年份2010-11-12。值10:45:15将被改造0000-00-00,因为45
不是法定月份。
2、以2比特数指定的年值是模糊的,因为世纪未知。MySQL使用以下规则
解释2位年值: 在00-69转换范围的年值2000-2069。 在范围70-99年价值
换到1970-1999。
版权声明
所有资源都来源于爬虫采集,如有侵权请联系我们,我们将立即删除