mysql timestamp比較查詢遇到的坑及解決
timestamp比較查詢遇到的坑
記得之前京東要求mysql建表的時(shí)候update_time 為timestamp,create_time為datetime。后來(lái)阿里的編碼規(guī)范里要求兩者都要是datetime類型的。
對(duì)于timestamp和datetime的區(qū)別好多地方都有介紹。有時(shí)在想為什么京東會(huì)要求update_time必須timestamp呢?難道是因?yàn)檎加玫目臻g少點(diǎn)?還是只有timestamp才能設(shè)置默認(rèn)值(on update current_timestamp)?默認(rèn)值datetime不是也可以設(shè)置么。后來(lái)百度了下,才知道 datetime支持設(shè)置默認(rèn)值是在5.7的時(shí)候才支持的。京東這么要求可能之前使用的mysql版本過低,同時(shí)要求update_time 能自動(dòng)更新的緣故吧。
現(xiàn)在在一家公司也是這么要求的 ,update_time設(shè)置為timestamp。結(jié)果遇到坑了。一同事發(fā)現(xiàn)很奇怪的問題:為什么date比較查詢沒有結(jié)果,而把日志里面打印的sql直接執(zhí)行卻能查詢到結(jié)果??為什么會(huì)出現(xiàn)這種不一致的情況,我之前也沒遇到過。解決問題嘛,總是讓人興奮的。
自己在本地試了下,確實(shí)是這樣的,打印的日志沒有問題,而正是日志‘迷惑'了我們,讓人覺得很奇怪??戳讼卤容^的字段 是 update_time, 正是timestamp類型的。經(jīng)過阿里規(guī)范熏陶過,敏銳的覺得應(yīng)該是類型的問題。所以自己百度了下發(fā)現(xiàn)是時(shí)區(qū)的問題。在數(shù)據(jù)庫(kù)連接url后面加上serverTimezone=GMT%2B8 參數(shù)就行了。當(dāng)然另一種方式就用datetime,這樣能避免很多坑。
為什么會(huì)出現(xiàn)這樣的問題?是因?yàn)閼?yīng)用服務(wù)器和mysql部署的服務(wù)器時(shí)區(qū)不一致導(dǎo)致的。這就是為什么我們看到的打印日志沒有問題,但是卻查詢不到結(jié)果的原因(日志中看到的時(shí)間是本機(jī)的時(shí)區(qū),但是當(dāng)數(shù)據(jù)傳輸?shù)絤ysql服務(wù)器時(shí),是另一個(gè)時(shí)區(qū)的時(shí)間)
mysql 的date 也有這個(gè)問題。。。
timestamp查詢范圍問題
MySQL中timestamp類型日期,比如更新時(shí)間是2020-05-26,查詢是時(shí) update_time <= 2020-05-26,是查詢不到的,需要轉(zhuǎn)為 DATE_FORMAT(info.up_time,'%Y-%m-%d') <= '2020-05-26',具體原因不明,需要深入研究。
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
詳解在Windows環(huán)境下訪問linux虛擬機(jī)中MySQL數(shù)據(jù)庫(kù)
這篇文章主要介紹了如何Windows環(huán)境下訪問linux虛擬機(jī)中MySQL數(shù)據(jù)庫(kù),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-04-04MySQL學(xué)習(xí)之SQL語(yǔ)法及SQL解析順序
這篇文章主要介紹了SQL語(yǔ)法及SQL解析順序,SQL(Structured Query Language)是一種標(biāo)準(zhǔn),作為一種訪問關(guān)系型數(shù)據(jù)庫(kù)的標(biāo)準(zhǔn)語(yǔ)言,感興趣的小伙伴可以借鑒閱讀2023-03-03MySQL如何統(tǒng)計(jì)一個(gè)數(shù)據(jù)庫(kù)所有表的數(shù)據(jù)量
最近在做統(tǒng)計(jì)想查找一個(gè)數(shù)據(jù)庫(kù)里基本所有的表數(shù)據(jù)量,下面這篇文章主要給大家介紹了關(guān)于MySQL如何統(tǒng)計(jì)一個(gè)數(shù)據(jù)庫(kù)所有表的數(shù)據(jù)量的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-04-04MySQL日期格式化yyyy-mm-dd詳解(DATE_FORMAT()函數(shù))
MySQL提供了很多功能強(qiáng)大、方便易用的函數(shù),在進(jìn)行數(shù)據(jù)庫(kù)管理以及數(shù)據(jù)的查詢和操作時(shí),幫助我們提高對(duì)數(shù)據(jù)庫(kù)的管理效率,下面這篇文章主要給大家介紹了關(guān)于MySQL日期格式化yyyy-mm-dd(DATE_FORMAT()函數(shù))的相關(guān)資料,需要的朋友可以參考下2023-01-01MySQL使用B+Tree當(dāng)索引的優(yōu)勢(shì)有哪些
這篇文章主要介紹了MySQL使用B+Tree當(dāng)索引有哪些優(yōu)勢(shì),幫助大家更好的理解和學(xué)習(xí)使用MySQL,感興趣的朋友可以了解下2021-03-03MySQL 5.6 中TIMESTAMP with implicit DEFAULT value is deprecat
安裝mysql的時(shí)候出現(xiàn)TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details),可以參考下面的方法解決2015-08-08淺談Mysql大數(shù)據(jù)分頁(yè)查詢解決方案
本文主要介紹了淺談Mysql大數(shù)據(jù)分頁(yè)查詢解決方案,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-02-02