类型名称 | 日期格式 | 日期范围 | 存储需求 |
---|---|---|---|
YEAR | YYYY | 1901-2155 | 1 字节 |
TIME | HH:MM:SS | -838:59:59~838:59:59 | 3 字节 |
DATE | YYYY-MM-DD | 1000-01-01~9999-12-31 | 3 字节 |
DATETIME | YYYY-MM-DD HH:MM:SS | 1000-01-01 00:00:00~9999-12-31 23:59:59 | 8 字节 |
TIMESTAMP | YYYY-MM-DD HH:MM:SS | 1970-01-01 00:00:01 UTC~2038-01-19 03:14:07 UTC | 4 字节 |
CREATE TABLE tmp3(y YEAR);② 向表中插入数据:
mysql> INSERT INTO tmp3 values(2010),('2010');③ 再次向表中插入数据:
mysql> INSERT INTO tmp3 values ('2166'); ERROR 1264 (22003): Out of range value for column 'y' at row 1④ 语句执行之后,MySQL 给出了一条错误提示,使用SHOW查看错误信息:
mysql> SHOW WARNINGS; +---------+------+----------------------------------------------+ | Level | Code | Message | +---------+------+----------------------------------------------+ | Error | 1264 | Out of range value for column 'y' at row 1; | +---------+------+----------------------------------------------+可以看到,插入的第 3 个值'2166'超过了 YEAR 类型的取值范围,此时不能正常执行插入操作,查看结果:
mysql> SELECT * FROM tmp3; +------+ | y | +------+ | 2010 | | 2010 | +------+由结果可以看到,当插入值为数值类型的 2010 或者字符串类型的'2010'时,都能正确地储存到数据库中;而当插入值'2166'时,由于超出了 YEAR 类型的取值范围,因此不能插入值。
DELETE FROM tmp3;② 向表中插入数据:
INSERT INTO tmp3 values('0'),('00'),('77'),('10');③ 查看结果:
mysql> SELECT * FROM tmp3; +------+ | y | +------+ | 2000 | | 2000 | | 1977 | | 2010 | +------+由结果可以看到,字符串 '0' 和 '00' 的作用相同,分别都转换成了 2000 年;'77' 转换为 1977;'10' 转换为 2010。
DELETE FROM tmp3;② 向表中插入数据:
INSERT INTO tmp3 values(0),(78),(11);③ 查看结果:
mysql> SELECT * FROM tmp3; +------+ | y | +------+ | 0000 | | 1978 | | 2011 | +------+由结果可以看到,0 被转换为 0000,78 被转换为 1978,11 被转换为 2011。
CREATE TABLE tmp4(t TIME);② 向表中插入数据:
mysql> INSERT INTO tmp4 values('10:05:05'), ('23:23'), ('2 10:10'), ('3 02'),('10');查看结果:
mysql> SELECT * FROM tmp4; +----------+ | t | +----------+ | 10:05:05 | | 23:23:00 | | 58:10:00 | | 74:00:00 | | 00:00:10 | +----------+由结果可以看到,'10:05:05' 被转换为 10:05:05;'23:23' 被转换为 23:23:00;'2 10:10' 被转换为 58:10:00,'3 02' 被转换为 74:00:00;'10' 被转换成 00:00:10。
DELETE FROM tmp4;② 向表中插入数据:
mysql>INSERT INTO tmp4 values('101112'),(111213),( '0');③ 再向表中插入数据:
mysql>INSERT I?NTO tmp4 values ( 107010); ERROR 1292 (22007): Incorrect time value: '107010' for column 't' at row 1④ 可以看到,在插入数据时,MySQL 给出了一个错误提示信息,使用“SHOW WARNINGS;”查看错误信息,如下所示:
mysql> show warnings; +---------+------+------------------------------------------------------+ | Level | Code | Message | +---------+------+------------------------------------------------------+ | Error | 1292 |Incorrect time value: '107010' for column 't' at row 1| +---------+------+------------------------------------------------------+可以看到,第二次在插入记录的时候,数据超出了范围,原因是 107010 的分钟部分超过了60(分钟部分是不会超过 60 的)。结果如下:
mysql> SELECT * FROM tmp4; +----------+ | t | +----------+ | 10:11:12 | | 11:12:13 | | 00:00:00 | +----------+由结果可以看到,'101112' 被转换为 10:11:12;111213 被转换为 11:12:13;'0' 被转换为 00:00:00;因为 107010 是不合法的值,所以不能被插入。
DELETE FROM tmp4;② 向表中插入数据:
mysql> INSERT INTO tmp4 values (CURRENT_TIME) ,(NOW());查看结果:
mysql> SELECT * FROM tmp4; +----------+ | t | +----------+ | 08:43:51 | | 08:43:51 | +----------+由结果可以看到,获取系统当前的日期时间插入到 TIME 类型的列 t,因为读者输入语句的时间不确定,所以获取的值可能与这里的不同,但都是系统当前的日期时间值。
MySQL> CREATE TABLE tmp5(d DATE);② 向表中插入“YYYY-MM-DD”和“YYYYMMDD”字符串格式日期:
MySQL> INSERT INTO tmp5 values('1998-08-08'),('19980808'),('20101010');查看插入结果:
MySQL> SELECT * FROM tmp5; +------------+ | d | +------------+ | 1998-08-08 | | 1998-08-08 | | 2010-10-10 | +------------+可以看到,各个不同类型的日期值都正确地插入到了数据表中。
DELETE FROM tmp5;② 向表中插入“YY-MM-DD”和“YYMMDD”字符串格式日期:
mysql> INSERT INTO tmp5 values ('99-09-09'),( '990909'), ('000101') ,('111111');查看插入结果:
mysql> SELECT * FROM tmp5; +-------------+ | d | +-------------+ | 1999-09-09 | | 1999-09-09 | | 2000-01-01 | | 2011-11-11 | +-------------+
DELETE FROM tmp5;② 向表中插入 YYYYMMDD 和 YYMMDD 数字格式日期:
mysql> INSERT INTO tmp5 values (19990909),(990909), (000101) ,(111111);查看插入结果:
mysql> SELECT * FROM tmp5; +-------------+ | d | +-------------+ | 1999-09-09 | | 1999-09-09 | | 2000-01-01 | | 2011-11-11 | +-------------+
DELETE FROM tmp5;② 向表中插入系统当前日期:
mysql> INSERT INTO tmp5 values( CURRENT_DATE() ),( NOW() );③ 查看插入结果:
mysql> SELECT * FROM tmp5; +-------------+ | d | +-------------+ | 2022-03-09 | | 2022-03-09 | +-------------+CURRENT_DATE 只返回当前日期值,不包括时间部分;NOW() 函数返回日期和时间值,在保存到数据库时,只保留了其日期部分。
CREATE TABLE tmp6(dt DATETIME);② 向表中插入“YYYY-MM-DD HH:MM:SS”和“YYYYMMDDHHMMSS”格式日期:
mysql> INSERT INTO tmp6 values(19990909090909), (101010101010);查看插入结果:
mysql> SELECT * FROM tmp6; +------------------------+ | dt | +------------------------+ | 1998-08-08 08:08:08 | | 1998-08-08 08:08:08 | | 2010-10-10 10:10:10 | +------------------------+可以看到,各个不同类型的日期值都正确地插入到了数据表中。
DELETE FROM tmp6;② 向表中插入“YY-MM-DD HH:MM:SS”和“YYMMDDHHMMSS”格式日期:
mysql> INSERT INTO tmp6 values('99-09-09 09:09:09'),('990909090909'),('101010101010');查看插入结果:
mysql> SELECT * FROM tmp6; +-------------------------+ | dt | +-------------------------+ | 1999-09-09 09:09:09 | | 1999-09-09 09:09:09 | | 2010-10-10 10:10:10 | +-------------------------+
DELETE FROM tmp6;② 向表中插入“YYYYMMDDHHMMSS”和“YYMMDDHHMMSS”数字格式日期和时间:
mysql> INSERT INTO tmp6 values(19990909090909), (101010101010);查看插入结果:
mysql> SELECT * FROM tmp6; +--------------------------+ | dt | +--------------------------+ | 1999-09-09 09:09:09 | | 2010-10-10 10:10:10 | +-------------------------+
DELETE FROM tmp6;② 向表中插入系统当前日期:
mysql> INSERT INTO tmp6 values( NOW() );查看插入结果:
mysql> SELECT * FROM tmp6; +-------------------------+ | dt | +-------------------------+ | 2022-03-15 17:07:30 | +-------------------------+NOW() 函数返回当前系统的日期和时间值,格式为“YYYY-MM-DD HH:MM:SS”。
CREATE TABLE tmp7(ts TIMESTAMP);② 向表中插入数据:
INSERT INTO tmp7 values ('19950101010101'), ('950505050505'), ('1996-02-02 02:02:02'), ('97@03@03 03@03@03'), (121212121212), ( NOW() );查看插入结果:
mysql>SELECT * FROM tmp7; +---------------------+ | ts | +---------------------+ | 1995-01-01 01:01:01 | | 1995-05-05 05:05:05 | | 1996-02-02 02:02:02 | | 1997-03-03 03:03:03 | | 2012-12-12 12:12:12 | | 2022-03-09 17:08:25 | +---------------------+由结果可以看到,“19950101010101”被转换为 1995-01-01 01:01:01;“950505050505”被转换为 1995-05-05 05:05:05;“1996-02-02 02:02:02”被转换为 1996-02-02 02:02:02;“97@03@03 03@03@03”被转换为 1997-03-03 03:03:03;121212121212 被转换为 2012-12-12 12:12:12;NOW() 被转换为系统当前日期时间 2022-03-09 17:08:25。
DELETE FROM tmp7;② 向表中插入系统当前日期:
mysql> INSERT INTO tmp7 values( NOW() );③ 查看当前时区下的日期值:
mysql> SELECT * FROM tmp7; +-------------------------+ | ts | +-------------------------+ | 2022-03-09 17:12:20 | +-------------------------+④ 查询结果为插入时的日期值。我国读者所在时区一般为东 8 区,下面修改当前时区为东 10 区,SQL 语句如下:
mysql> set time_zone='+10:00';⑤ 再次查看插入时的日期值:
mysql> SELECT * FROM tmp7; +-------------------------+ | ts | +-------------------------+ | 2022-03-09 19:12:20 | +-------------------------+由结果可以看到,因为东 10 区时间比东 8 区快 2 个小时,所以查询的结果经过时区转换之后,显示的值增加了 2 小时。类似地,如果时区每减小一个值,则查询显示的日期中的小时数减 1。
本文链接:http://task.lmcjl.com/news/5164.html