mysql時(shí)間格式和Java時(shí)間格式的對(duì)應(yīng)方式
在 MySQL 中有兩種存儲(chǔ)時(shí)間的數(shù)據(jù)類型 DATETIME 和 TIMESTAMP ,它們?cè)跀?shù)據(jù)庫實(shí)際應(yīng)用中,各有各的優(yōu)勢(shì)和劣勢(shì)。
以下將詳細(xì)詳解兩個(gè)數(shù)據(jù)類型的區(qū)別,以及用實(shí)戰(zhàn)案例說明它們的使用場(chǎng)景。
一. DATETIME 和 TIMESTAMP 的相同點(diǎn)
兩個(gè)數(shù)據(jù)類型存儲(chǔ)時(shí)間的格式一致。均為 YYYY-MM-DD HH:MM:SS
兩個(gè)數(shù)據(jù)類型都包含「日期」和「時(shí)間」部分。
兩個(gè)數(shù)據(jù)類型都可以存儲(chǔ)微秒的小數(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 個(gè)字節(jié)(小數(shù)秒+3 個(gè)字節(jié))DATETIME:在 MySQL 5.6.4 之前,占 8 個(gè)字節(jié) ,之后版本,占 5 個(gè)字節(jié)。(小數(shù)秒+3 個(gè)字節(jié))
3. 存入時(shí)間是否會(huì)自動(dòng)轉(zhuǎn)換?
TIMESTAMP:TIMESTAMP 的值是從「當(dāng)前時(shí)間」轉(zhuǎn)換成 UTC 時(shí)間,或者反過來轉(zhuǎn)換。DATETIME:不會(huì)做任何轉(zhuǎn)換,也不會(huì)檢測(cè)時(shí)區(qū),你給什么數(shù)據(jù),它存什么數(shù)據(jù)。
4.使用 now() 存儲(chǔ)當(dāng)前時(shí)間時(shí)
保存的實(shí)際值,是否與當(dāng)前計(jì)算機(jī)時(shí)間一致?
TIMESTAMP:可能不一致。存儲(chǔ)值會(huì)被轉(zhuǎn)換成 UTC 時(shí)間值再存入數(shù)據(jù)庫。DATETIME:與當(dāng)前時(shí)間是一致的。
5.如果存入的是 NULL 時(shí),兩個(gè)類型如何存儲(chǔ)?
TIMESTAMP:會(huì)自動(dòng)存儲(chǔ)當(dāng)前時(shí)間( now() )。DATETIME:不會(huì)自動(dòng)存儲(chǔ)當(dāng)前時(shí)間,會(huì)直接存入 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é)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
MySQL獲取當(dāng)前時(shí)間的多種方式總結(jié)
負(fù)責(zé)的項(xiàng)目中使用的是mysql數(shù)據(jù)庫,頁面上要顯示當(dāng)天所注冊(cè)人數(shù)的數(shù)量,獲取當(dāng)前的年月日,下面這篇文章主要給大家總結(jié)介紹了關(guān)于MySQL獲取當(dāng)前時(shí)間的多種方式,需要的朋友可以參考下2023-02-02
MySQL數(shù)據(jù)庫基礎(chǔ)入門之常用命令小結(jié)
這篇文章主要介紹了MySQL數(shù)據(jù)庫基礎(chǔ)入門之常用命令,結(jié)合實(shí)例形式分析了MySQL數(shù)據(jù)庫管理、備份、日志常用操作命令與使用注意事項(xiàng),需要的朋友可以參考下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ū)別
本篇文章是對(duì)mysql中max_connections與max_user_connections的區(qū)別進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-06-06
MySql下關(guān)于時(shí)間范圍的between查詢方式
這篇文章主要介紹了MySql下關(guān)于時(shí)間范圍的between查詢方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-07-07
MySQL添加索引的5種常用方式總結(jié)(附實(shí)用SQL代碼)
在MySQL中可以使用ALTER TABLE語句來為表添加索引,索引可以提高查詢性能,這篇文章主要介紹了MySQL添加索引的5種常用方式,文中還附實(shí)用SQL代碼,需要的朋友可以參考下2025-07-07

