sql:常用:DateTime,Timestamp,Time和Date有什么区别?

场景:

用Mysql出现时间问题Incorrect datetime value: '' for column 'createtime',查明原因数据库中用的是TIMESTAMP格式,时间为1970-2038年范围之外的日期无法入库。

解决:使用datetime字段类型

总结如下:

使用MySQL作为一个例子(如果没有其他原因,因为它是最流行的),你有DATE,DATETIME,TIME和TIMESTAMP列数据类型; 就像你有CHAR,VARCHAR,FLOAT和INTEGER。

DATE只存储一个日期:年月日

TIME只存储一天的时间:时分秒

DATETIME存储日期+时间,DATETIME被格式化为YYYY-MM-DD HH:MM:SS,有效范围从1000年到9999年(以及其间的所有内容)。精确到时分秒,用于做时间戳。8个字节储存。

TIMESTAMP :从数据库中获取时TIMESTAMP 看起来是相似的,但它实际上只是一个unix时间戳的前沿,其有效范围从1970年到2038年。

这里除了数据库引擎内部的各种内置函数之外,还有存储空间,由于DATETIME每年,每月,每天,每小时,每分钟和每秒都存储一个数字,所以总共消耗了8个字节。TIMESTAMP,自1970-01-01以来的秒数,它使用4个字节。

最后,它归结为你需要你的日期/时间列做什么。

需要在1970年以前或2038年以后存储日期和时间,使用DATETIME,但需要担心数据库的大小。

在这个时间1970-2038范围内?使用TIMESTAMP。

  • 4
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在MySQL中,时间类型有四种,分别是DATETIMEDATETIMETIMESTAMP,这些类型在Java中的转换方式如下: 1. DATETIME类型 在Java中,可以使用java.time.LocalDateTime类来表示DATETIME类型。在通过JDBC从MySQL中读取DATETIME类型的值时,可以使用ResultSet类的getTimestamp方法获取java.sql.Timestamp类型的值,然后再将其转换为java.time.LocalDateTime类型: ```java ResultSet rs = stmt.executeQuery("SELECT datetime_column FROM table"); while (rs.next()) { Timestamp timestamp = rs.getTimestamp("datetime_column"); LocalDateTime datetime = timestamp.toLocalDateTime(); // ... } ``` 在将java.time.LocalDateTime类型的值写入到MySQLDATETIME类型的字段时,可以使用PreparedStatement类的setTimestamp方法: ```java PreparedStatement pstmt = conn.prepareStatement("INSERT INTO table (datetime_column) VALUES (?)"); LocalDateTime datetime = LocalDateTime.now(); Timestamp timestamp = Timestamp.valueOf(datetime); pstmt.setTimestamp(1, timestamp); pstmt.executeUpdate(); ``` 2. DATE类型 在Java中,可以使用java.time.LocalDate类来表示DATE类型。在通过JDBC从MySQL中读取DATE类型的值时,可以使用ResultSet类的getDate方法获取java.sql.Date类型的值,然后再将其转换为java.time.LocalDate类型: ```java ResultSet rs = stmt.executeQuery("SELECT date_column FROM table"); while (rs.next()) { Date date = rs.getDate("date_column"); LocalDate localDate = date.toLocalDate(); // ... } ``` 在将java.time.LocalDate类型的值写入到MySQLDATE类型的字段时,可以使用PreparedStatement类的setDate方法: ```java PreparedStatement pstmt = conn.prepareStatement("INSERT INTO table (date_column) VALUES (?)"); LocalDate localDate = LocalDate.now(); Date date = Date.valueOf(localDate); pstmt.setDate(1, date); pstmt.executeUpdate(); ``` 3. TIME类型 在Java中,可以使用java.time.LocalTime类来表示TIME类型。在通过JDBC从MySQL中读取TIME类型的值时,可以使用ResultSet类的getTime方法获取java.sql.Time类型的值,然后再将其转换为java.time.LocalTime类型: ```java ResultSet rs = stmt.executeQuery("SELECT time_column FROM table"); while (rs.next()) { Time time = rs.getTime("time_column"); LocalTime localTime = time.toLocalTime(); // ... } ``` 在将java.time.LocalTime类型的值写入到MySQLTIME类型的字段时,可以使用PreparedStatement类的setTime方法: ```java PreparedStatement pstmt = conn.prepareStatement("INSERT INTO table (time_column) VALUES (?)"); LocalTime localTime = LocalTime.now(); Time time = Time.valueOf(localTime); pstmt.setTime(1, time); pstmt.executeUpdate(); ``` 4. TIMESTAMP类型 在Java中,可以使用java.time.LocalDateTime类来表示TIMESTAMP类型。在通过JDBC从MySQL中读取TIMESTAMP类型的值时,可以使用ResultSet类的getTimestamp方法获取java.sql.Timestamp类型的值,然后再将其转换为java.time.LocalDateTime类型: ```java ResultSet rs = stmt.executeQuery("SELECT timestamp_column FROM table"); while (rs.next()) { Timestamp timestamp = rs.getTimestamp("timestamp_column"); LocalDateTime datetime = timestamp.toLocalDateTime(); // ... } ``` 在将java.time.LocalDateTime类型的值写入到MySQLTIMESTAMP类型的字段时,可以使用PreparedStatement类的setTimestamp方法: ```java PreparedStatement pstmt = conn.prepareStatement("INSERT INTO table (timestamp_column) VALUES (?)"); LocalDateTime datetime = LocalDateTime.now(); Timestamp timestamp = Timestamp.valueOf(datetime); pstmt.setTimestamp(1, timestamp); pstmt.executeUpdate(); ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值