Mysql中的date與datetime,以及如何向Mysql中插入“日期+時間”資料
我們知道,java中有date和datetime,mysql中也有date和datetime,這裡我們來說說mysql中的date和datetime。
1 mysql中的date和datetime
1.1 DATETIME
型別可用於需要同時包含日期和時間資訊的值。MySQL 以:
‘YYYY-MM-DD HH:MM:SS’
格式檢索與顯示 DATETIME 型別。支援的範圍是:
‘1000-01-01 00:00:00’
到
‘9999-12-31 23:59:59’。
(“支援”的含義是,儘管更早的值可能工作,但不能保證他們均可以。)
1.2 DATE
型別可用於需要一個日期值而不需要時間部分時。MySQL 以
‘YYYY-MM-DD’
格式檢索與顯示DATE值。支援的範圍則是
‘1000-01-01’
到
‘9999-12-31’。
2 與java資料的互動
能看出來mysql中的date和datetime區別還是挺大的,date沒有儲存時間。但是java中的date(java.util.Date)記錄的還是挺細的,日期和時間都可以記下來,那麼現在問題來了,如果想在mysql中儲存日期和時間,也就是用datetime,而在資料中應該如何對應呢?
我使用hibernate測了一下,發現當把mysql資料庫中設定了datetime,反向工程生成的hbm.xml檔案中,使用的是timestamp
<property name="Publishdate" column="publishdate" type="timestamp" not-null="false" length="10" />
反向生成java的pojo時,生成的還是Date。
由此可見對於mysql中datetime,與java中的date,如果要使二者正確互動,中間要使用timestamp。
如果要在JAVA中直接插入MySql的datetime型別,則可以使用:
Date date = new Date();
Timestamp timeStamp = new Timestamp(date.getTime());
再用setTimestamp()設定資料庫中的“日期+時間”。
這樣放入資料庫的就是“yyyy-mm-dd hh:mm:ss”格式的資料。
注意,mysql中如果使用date而不是datetime是儲存不下“日期+時間”的,只能儲存“時間”。