日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

MySQL日期类型的处理总结

發布時間:2025/3/12 数据库 15 豆豆
生活随笔 收集整理的這篇文章主要介紹了 MySQL日期类型的处理总结 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、概述

MySQL中的日期類型包括以下5種:

類型大小
(字節)范圍格式用途
DATE31000-01-01/9999-12-31YYYY-MM-DD日期值
TIME3'-838:59:59'/'838:59:59'HH:MM:SS時間值或持續時間
YEAR11901/2155YYYY年份值
DATETIME81000-01-01 00:00:00/9999-12-31 23:59:59YYYY-MM-DD HH:MM:SS混合日期和時間值
TIMESTAMP4

1970-01-01 00:00:00/2038

結束時間是第?2147483647?秒,北京時間?2038-1-19 11:14:07,格林尼治時間 2038年1月19日 凌晨 03:14:07

YYYY-MM-DD HH:MM:SS混合日期和時間值,時間戳

二、DATE

從取值范圍來看DATE類型的mysql數據并不受格林尼治時間的限制。

1、使用場景

可以看到DATE類型的數據格式為:YYYY-MM-DD,對于只限制到日期的數據項,我們可以使用此種類型存儲,如生日、節假日等。

2、Java存儲方式

Java中對于date類型的存儲可以使用java.sql.date直接存入。

public int test() {String sql = "INSERT INTO user2(user_name,birthday) VALUES(?,?)";Object[] args = { "mht",java.sql.Date.valueOf("1992-11-20") };return jdbc.update(sql,args);}

執行結果:

這是使用指定日期格式的字符串插入date類型數據的情況,對于那些并不是日期字符串的日期、毫秒值等,可以先通過DateFormat抽象類將其轉化為“yyyy-MM-dd”后再傳入靜態方法Date.valueOf(String dateStr)來實現。

3.Java查詢方式

DATE類型的mysql數據查詢到Java程序中,我們如何接收和處理。

首先,定義接收的實體類:

執行查詢:

public User test() {String sql = "select * from user2";List<User> list = jdbc.query(sql, new BeanPropertyRowMapper<>(User.class));User user = list.get(0);return user;}

查詢結果:

說明:這里使用了一個靜態內部類來接收從數據庫中查詢的user對象,但是這和普通的實體類并沒有什么兩樣。此處沒有截取get、set方法,但是對于使用框架來查詢mapper的情況,get、set應該是必須的。

這里可能會有疑問,從數據庫中使用的date類型,在Java中可以用util.Date來接收嗎?

答案是可以的,當然也可以使用sql.Date,這并不會影響最終我們取得的數據,因為:

public class Date extends java.util.Date {

如果我們將date類型(無論是sqlDate還是utilDate)直接返回給頁面,那么他們拿到的都是一個毫秒值(時分秒部分全為0),所以無論如何都需要在頁面通過js來實現日期的格式化,當然這不在我們的討論范疇之內。

總之,在Java中接收DATE日期,直接使用java.util.Date即可,也方便我們做其他轉化工作。

三、TIME

MySQL中的TIME時間類型,可以用于存儲時長或時間點。

1、Java存儲

public int test() {String sql = "INSERT INTO user2(user_name,time_on_foot) VALUES(?,?)";Object[] args = { "mht",java.sql.Time.valueOf("0:5:30") };return jdbc.update(sql, args);}

存儲結果:

2、Java查詢

實體類:

對于TIME類型的mysql數據,Java中有對應的java.sql.Time來接收其值,而且,返回頁面的數據也會正常顯示數據庫中存儲的樣子而不會“變形”。

public User test() {String sql = "select * from user2";List<User> list = jdbc.query(sql, new BeanPropertyRowMapper<>(User.class));User user = list.get(0);return user;}

查詢結果:

但是用java.util.Date來接收TIME類型的MySQL數據就會出現問題,所以對于TIME類型的數據,貌似只能用java.sql.Time類來接收數據。在實際開發中注意體會和總結。

四、DATETIME和TIMESTAMP

終于到了重頭戲部分!

DATETIME代表的語言含義是“日期時間”;而TIMESTAMP則表示“(人能看懂的)時間戳”。

兩種類型數據的格式都是“YYYY-MM-DD HH:MM:SS”。那在實際應用中我們的數據到底應該使用前者還是后者呢?

1、兩者的區別

a)、兩者的范圍不同。

b)、兩者的存儲大小不同。TIMESTAMP存儲空間是DATETIME的一半!

c)、雖然管理工具中并未顯示,但實際上TIMESTAMP可以精確到毫秒。

d)、TIMESTAMP有個特性:在insert、update數據時,TIMESTAMP列可以自動以當前時間(CURRENT_TIMESTAMP)填充/更新,MySQL引擎可以自動為更新的數據維護這個值。我們可以通過勾選“根據當前時間更新”復選框來調整MySQL數據庫對該字段的維護操作。如果有多個TIMESTAMP列,并且都勾選了此項,那么MySQL會對這些列都進行維護操作。

e)、TIMESTAMP會受到時區timezone的影響以及MySQL和SQL mode的影響。

2、TIMESTAMP設置默認值的方式

sql方式:

ALTER TABLE user2 MODIFY upd_time TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP

管理工具方式:

新增記錄:

INSERT INTO user2(user_name) VALUES("MHT")

結果展示:

2.Java存儲

先看一下db結構:

對于TIMESTAMP類型的數據,如果設置了默認值,且更新時數據庫會自動維護,那么在Java 中就不需要對其進行處理。如果需要Java進行插入,我們也可以通過如下方式來添加時間戳數據:

public int test() {String sql = "INSERT INTO user2(user_name,upd_time2) VALUES(?,?)";Object[] args = { "test1", new java.sql.Timestamp(System.currentTimeMillis())};return jdbc.update(sql,args);}

我們通過java.sql.Timestamp對象來存儲不需要MySQL為我們維護的TIMESTAMP數據即可。

還以上表說話。

對于DATETIME類型的數據,create_time。實際上我們可以將這個字段設計為一個不會隨系統時間改變的TIMESTAMP。即只有insert的時候添加默認值,update時不會更新此值。

如果確定是要用datetime來表示該字段,那么,我們需要在Java中通過java.util.Date來存儲該值。因為java.util.Dated 默認包含時分秒數據,可以完美對應MySQL中DATETIME類型的數據。

String sql = "UPDATE user2 SET create_time = ? WHERE user_name = 'test1'";Object[] args = {new java.util.Date(System.currentTimeMillis())};jdbc.update(sql,args);

執行結果為:

3、Java查詢

表中存在三個字段create_time、upd_time、upd_time2,第一個是DATETIME類型,后面兩個是TIMESTAMP類型數據。

我們的User對象定義三個字段的類型如下:

執行查詢:

public User test() {String sql = "select * from user2";List<User> list = jdbc.query(sql, new BeanPropertyRowMapper<>(User.class));User user = list.get(0);return user;}

輸出結果:

可以看到MySQL中TIMESTAMP類型的數據無論用java.sql.Timestamp還是java.util.Date接收傳到頁面都是一個只精確到秒的毫秒值的形式。所以這兩種方式并沒有太大的區別。

DATETIME數據由于Java中只有java.util.Date可對應其類型,因此我們用其接收數據,也完全沒問題。為了方便記憶,我們可以在查詢DATETIME和TIMESTAMP兩種類型數據的時候都通過java.util.Date來接收即可。

五、常用的MySQL日期函數

SELECT NOW(),CURRENT_DATE(),CURRENT_TIME(),CURRENT_TIMESTAMP(),LOCALTIMESTAMP(),LOCALTIME()

輸出結果:

-----------------------------------------------------我是分割線--------------------------------------------------------

綜上,就是對MySQL日期類型的處理總結,如有疑問,歡迎文末留言。

參考文章:《MySQL日期數據類型、時間類型使用總結》

總結

以上是生活随笔為你收集整理的MySQL日期类型的处理总结的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。