Mysql的日期和时间类型

Mysql的日期和时间类型

记录:在本周工作中,有一个需求要将某个字段的默认带值给去除,在去除之后运行时又出现了insert错误的情况,开始以为原因是该数据库字段为DATETIME类型,必须要有默认值,没有默认值时就会出现插入错误的情况,后改为timestamp类型解决。但是后来整理博客和测试之后发现DATETIME类型没有默认值也是可以插入的,后来在某篇博客上看见还可能与mysql的版本有关,应该就是这个问题,因为我们开发环境是5点几的版本出现了该问题,而我本地8点几版本的未出现问题(待确认)。

在这里插入图片描述
mysql与java的对应关系

MySQL Type NameReturn value of GetColumnClassNameReturned as Java Class
DATETIMEDATETIMEjava.sql.Timestamp
DATEDATEjava.sql.Date
TIMESTAMP[(M)]TIMESTAMPjava.sql.Timestamp
TIMETIMEjava.sql.Time

这些数据类型的主要区别如下:
1.如果要用来表示年月日,通常用DATE 来表示。

2.如果要用来表示年月日时分秒,通常用DATETIME 表示。

3.如果只用来表示时分秒,通常用TIME 来表示。

4.如果需要经常插入或者更新日期为当前系统时间,则通常使用TIMESTAMP 来表示。TIMESTAMP 值返回后显示为“YYYY-MM-DD HH:MM:SS”格式的字符串,显示宽度固定为19 个字符。如果想要获得数字值,应在TIMESTAMP 列添加+0。

5.如果只是表示年份,可以用YEAR 来表示,它比DATE 占用更少的空间。YEAR 有2 位或4 位格式的年。默认是4 位格式。在4 位格式中,允许的值是1901~2155 和0000。在2 位格式中,允许的值是70~69,表示从1970~2069 年。MySQL 以YYYY 格式显示YEAR值。

测试一下:
都未设置默认值的情况下:
在这里插入图片描述

 insert into course(Cno, Cname, Ctimestamp, Cdatetime, Cdate, Ctime, Cyear)
 values ('111', '小明',now(),now(),now(),now(),now());

结果:成功插入
在这里插入图片描述
可以明显看出各字段的不同,主要就是DATETIMETIMESTAMP不好区分。

TIMESTAMP的特点:
1.MySQL只给表中的第一个TIMESTAMP字段设置默认值为系统日期,如果有第二个TIMESTAMP类型,则默认值设置为0值,可以修改第二个TIMESTAMP类型的默认值为其他常量日期,但是不能再修改为current_timestmap,因为MySQL规定TIMESTAMP类型字段只能有一列的默认值为current_timestmap,如果强制修改,系统会报错。
2.TIMESTAMP还有一个重要特点,就是和时区相关。当插入日期时,会先转换为本地时区后存放;而从数据库里面取出时,也同样需要将日期转换为本地时区后显示。而DATETIME类型存储的int,与时区没有关系。
3.TIMESTAMP的范围比之DATETIME要小。

DATETIME类型要这样设置默认值:
在这里插入图片描述
在这里插入图片描述

参考博客
https://blog.csdn.net/weixin_34177064/article/details/86120034
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值