首页 > 技术文章 > Mysql(5)_ 基本数据类型-时间

sunnybowen 2018-11-06 21:51 原文

 1 time,date 以及datetime


 

CREATE TABLE t4(
  d date,
  t time,
  dt datetime
);
DESC t4;
use test01;
INSERT INTO t4 VALUES(NOW(),NOW(),NOW());
show tables;
SELECT * from t4;


2  timestamp,Mysql只给表中的第一个timestamp字段默认值为当前时间,如果有第二个该类型的字段,默认值是0.

CREATE TABLE t5(
 id1 timestamp
);
INSERT into t5 VALUES(null);

 


 

 timestamp和时区有关系,当插入日期时,会先转换为本地时区存放。从数据库读取出时,也要先转化为本地时区后显示。这样,两个不同时区的看到的同一个日期可能是不一样的。也就是说now实际时间是八点四十九分,但是时间戳实际上是东九区的,九点四十九分。如果还是以now()来理解就会有误差

CREATE TABLE t6(
id1 timestamp NOT NULL DEFAULT  CURRENT_TIMESTAMP,
id2  datetime DEFAULT NULL
);
-- 查看当前时区
show VARIABLES LIKE 'time_zone';
SHOW VARIABLES LIKE '%log';
INSERT INTO t6 (id2) VALUES(NOW());
SELECT * from t6;
-- 修改时区为东九区
set time_zone='+9:00';

 

DESC t5;
SELECT * from t5;
 -- timestamo 开始时间
INSERT INTO t5 VALUES(19700101080001);
--  最晚时间,2038年,再插入09秒就会报错
INSERT INTO t5 VALUES('2038-01-19 11:14:00');
-- 早于开始时间插入会报错,之前的mysql版本不报错,默认是0
insert INTO t5 VALUES(19700101080000);

 1     Datetime的范围更大。并且Datetime只能表示当地时区,其他时区的人看必然是有误差的

 2      TimeStamp的插入受时区和影响,更能反应出实际的日期

CREATE TABLE t7(
 dt datetime
);
INSERT INTO t7 VALUES('2007-9-3 12:10:10');
INSERT INTO t7 VALUES('2007/9/3 12+10+10');
INSERT INTO t7 VALUES('20070903121010');
SELECT * FROM t7;

 

推荐阅读