mysql時間格式和Java時間格式的對應(yīng)方式
在 MySQL 中有兩種存儲時間的數(shù)據(jù)類型 DATETIME 和 TIMESTAMP ,它們在數(shù)據(jù)庫實際應(yīng)用中,各有各的優(yōu)勢和劣勢。
以下將詳細(xì)詳解兩個數(shù)據(jù)類型的區(qū)別,以及用實戰(zhàn)案例說明它們的使用場景。
一. DATETIME 和 TIMESTAMP 的相同點
兩個數(shù)據(jù)類型存儲時間的格式一致。均為 YYYY-MM-DD HH:MM:SS
兩個數(shù)據(jù)類型都包含「日期」和「時間」部分。
兩個數(shù)據(jù)類型都可以存儲微秒的小數(shù)秒(秒后6位小數(shù)秒)
二. DATETIME 和 TIMESTAMP 的區(qū)別
1.表示范圍
DATETIME:1000-01-01 00:00:00.000000 到 9999-12-31 23:59:59.999999TIMESTAMP:‘1970-01-01 00:00:01.000000’ UTC 到 ‘2038-01-09 03:14:07.999999’ UTC
2.空間占用
TIMESTAMP:占 4 個字節(jié)(小數(shù)秒+3 個字節(jié))DATETIME:在 MySQL 5.6.4 之前,占 8 個字節(jié) ,之后版本,占 5 個字節(jié)。(小數(shù)秒+3 個字節(jié))
3. 存入時間是否會自動轉(zhuǎn)換?
TIMESTAMP:TIMESTAMP 的值是從「當(dāng)前時間」轉(zhuǎn)換成 UTC 時間,或者反過來轉(zhuǎn)換。DATETIME:不會做任何轉(zhuǎn)換,也不會檢測時區(qū),你給什么數(shù)據(jù),它存什么數(shù)據(jù)。
4.使用 now() 存儲當(dāng)前時間時
保存的實際值,是否與當(dāng)前計算機時間一致?
TIMESTAMP:可能不一致。存儲值會被轉(zhuǎn)換成 UTC 時間值再存入數(shù)據(jù)庫。DATETIME:與當(dāng)前時間是一致的。
5.如果存入的是 NULL 時,兩個類型如何存儲?
TIMESTAMP:會自動存儲當(dāng)前時間( now() )。DATETIME:不會自動存儲當(dāng)前時間,會直接存入 NULL 值。
sql
CREATE TABLE `task_lock` ( `id` bigint NOT NULL AUTO_INCREMENT, `task_name` varchar(255) NOT NULL, `lock_state` varchar(255) NOT NULL, `update_time` datetime DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=12 DEFAULT CHARSET=utf8mb3;
mybatis
<insert id="save" parameterType="com.example.test1.model.TaskLock">
insert into task_lock(task_name,lock_state,update_time) values(#{taskName},#{lockState},#{updateTime})
</insert>java
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class TaskLock {
private Integer id;
private String taskName;
private String lockState;
private Date updateTime;
}
@Autowired
TaskLockMapper taskLockMapper;
@Test
public void InsetTest() {
System.out.println(taskLockMapper);
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String currentSimpleDateFormat = simpleDateFormat.format(new Date());
TaskLock taskLock = TaskLock.builder()
.lockState("locked")
.taskName("123")
.updateTime(new Date())
.build();
int result = taskLockMapper.save(taskLock);
System.out.println("result:"+result);
}
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
MySQL數(shù)據(jù)庫基礎(chǔ)入門之常用命令小結(jié)
這篇文章主要介紹了MySQL數(shù)據(jù)庫基礎(chǔ)入門之常用命令,結(jié)合實例形式分析了MySQL數(shù)據(jù)庫管理、備份、日志常用操作命令與使用注意事項,需要的朋友可以參考下2020-05-05
mysql Access denied for user ‘root’@’localhost’ (using passw
這篇文章主要介紹了mysql Access denied for user ‘root’@’localhost’ (using password: YES)解決方法,本文給出詳細(xì)的解決步驟及操作注釋,需要的朋友可以參考下2015-07-07
解析mysql中max_connections與max_user_connections的區(qū)別
本篇文章是對mysql中max_connections與max_user_connections的區(qū)別進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-06-06
MySql下關(guān)于時間范圍的between查詢方式
這篇文章主要介紹了MySql下關(guān)于時間范圍的between查詢方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-07-07
MySQL添加索引的5種常用方式總結(jié)(附實用SQL代碼)
在MySQL中可以使用ALTER TABLE語句來為表添加索引,索引可以提高查詢性能,這篇文章主要介紹了MySQL添加索引的5種常用方式,文中還附實用SQL代碼,需要的朋友可以參考下2025-07-07

