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);
3 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;