mysql時(shí)間格式和Java時(shí)間格式的對應(yīng)方式
在 MySQL 中有兩種存儲時(shí)間的數(shù)據(jù)類型 DATETIME 和 TIMESTAMP ,它們在數(shù)據(jù)庫實(shí)際應(yīng)用中,各有各的優(yōu)勢和劣勢。
以下將詳細(xì)詳解兩個(gè)數(shù)據(jù)類型的區(qū)別,以及用實(shí)戰(zhàn)案例說明它們的使用場景。
一. DATETIME 和 TIMESTAMP 的相同點(diǎn)
兩個(gè)數(shù)據(jù)類型存儲時(shí)間的格式一致。均為 YYYY-MM-DD HH:MM:SS
兩個(gè)數(shù)據(jù)類型都包含「日期」和「時(shí)間」部分。
兩個(gè)數(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 個(gè)字節(jié)(小數(shù)秒+3 個(gè)字節(jié))DATETIME
:在 MySQL 5.6.4 之前,占 8 個(gè)字節(jié) ,之后版本,占 5 個(gè)字節(jié)。(小數(shù)秒+3 個(gè)字節(jié))
3. 存入時(shí)間是否會自動轉(zhuǎn)換?
TIMESTAMP
:TIMESTAMP 的值是從「當(dāng)前時(shí)間」轉(zhuǎn)換成 UTC 時(shí)間,或者反過來轉(zhuǎn)換。DATETIME
:不會做任何轉(zhuǎn)換,也不會檢測時(shí)區(qū),你給什么數(shù)據(jù),它存什么數(shù)據(jù)。
4.使用 now() 存儲當(dāng)前時(shí)間時(shí)
保存的實(shí)際值,是否與當(dāng)前計(jì)算機(jī)時(shí)間一致?
TIMESTAMP
:可能不一致。存儲值會被轉(zhuǎn)換成 UTC 時(shí)間值再存入數(shù)據(jù)庫。DATETIME
:與當(dāng)前時(shí)間是一致的。
5.如果存入的是 NULL 時(shí),兩個(gè)類型如何存儲?
TIMESTAMP
:會自動存儲當(dāng)前時(shí)間( now() )。DATETIME
:不會自動存儲當(dāng)前時(shí)間,會直接存入 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的游標(biāo)的定義使用及關(guān)閉深入分析
于游標(biāo)的用法Mysql現(xiàn)在提供的還很特別,雖然使用起來沒有PL/SQL那么順手,不過使用上大致上還是一樣,本文將詳細(xì)介紹一下,需要了解的朋友可以參考下2012-12-12MySQL優(yōu)化案例之隱式字符編碼轉(zhuǎn)換
這篇文章主要介紹了MySQL優(yōu)化案例之隱式字符編碼轉(zhuǎn)換,隱式類型轉(zhuǎn)換也會導(dǎo)致同樣的放棄走樹搜索,更多相關(guān)內(nèi)容具有一定的參考價(jià)值,需要的朋友可以參考一下2022-07-07mysql安裝時(shí)出現(xiàn)各種常見問題的解決方法
mysql數(shù)據(jù)庫安裝不了了!mysql最后一步安裝不上?真頭疼!這篇文章主要為大家詳細(xì)介紹了解決mysql安裝時(shí)出現(xiàn)各種經(jīng)典問題的方法,感興趣的小伙伴們可以參考一下2016-08-08MySQL中KEY、PRIMARY KEY、UNIQUE KEY、INDEX 的區(qū)別
本文給大家分享的是mysql索引中的KEY、PRIMARY KEY、UNIQUE KEY、INDEX 的區(qū)別,即主鍵索引,唯一索引和普通索引的區(qū)別,希望大家能夠喜歡2017-07-07Mysql基礎(chǔ)入門 輕松學(xué)習(xí)Mysql命令
這篇文章主要是Mysql基礎(chǔ)入門教程,教大家如何輕松學(xué)習(xí)Mysql命令,并熟練掌握Mysql命令,感興趣的小伙伴們可以參考一下2015-11-11phpstudy無法啟動MySQL服務(wù)的完美解決辦法
學(xué)習(xí)php當(dāng)然是要先安裝好運(yùn)行環(huán)境了,phpstyudy是一個(gè)運(yùn)行php的集成環(huán)境,一鍵安裝對新手很友好,下面這篇文章主要給大家介紹了關(guān)于phpstudy無法啟動MySQL服務(wù)的完美解決辦法,需要的朋友可以參考下2022-06-06