最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

mysql now()函數(shù)調(diào)用系統(tǒng)時間不對的解決方法

 更新時間:2023年05月24日 11:25:17   作者:五角大寨  
mysql的now()函數(shù)與實際時間不符,本文就詳細(xì)的介紹一下mysql now()函數(shù)調(diào)用系統(tǒng)時間不對的解決方法,非常具有實用價值,需要的朋友可以參考下

今天在MySQL的Now函數(shù)上踩了兩個坑,花了不少時間。

向數(shù)據(jù)庫寫記錄最好用不用客戶端時間

第一個坑是客戶端、服務(wù)器的系統(tǒng)時間不一致。

在執(zhí)行依賴時間的SQL查詢的時候,使用了客戶端本地的時間格式,客戶端程序返回當(dāng)前時間是:‘7/18/2022 10:02:43’,然而MYSQL就不能正確識別了,也沒有報錯,導(dǎo)致這個這個錯誤隱藏了很久才被發(fā)現(xiàn)。

實際上,如果給出的時間格式是這樣:‘2022/7/18 10:02:43’,就會返回預(yù)期的結(jié)果。猜想這次運行客戶端程序的服務(wù)器雖然也是中文版,但是內(nèi)核應(yīng)該是英文版的,因此系統(tǒng)默認(rèn)的時間格式和我們常見的不同,于是MySQL把它認(rèn)作是。。。(一個古怪的時間去了)

解決辦法

盡可能不使用客戶端的時間,不準(zhǔn)確還有時區(qū)問題,用MySQL服務(wù)器端時間Now()來進行查詢和保存記錄。

MySQL服務(wù)器時區(qū)不等于東八區(qū)的問題

這次遇到的MySQL的版本默認(rèn)的時區(qū)是UTC,也就是標(biāo)準(zhǔn)時間。如果數(shù)據(jù)記錄的時間是北京時間,也就是東八區(qū)的時間,那么MySQL的Now函數(shù)返回的時間和數(shù)據(jù)記錄的時間相差了八個小時。

查詢MySQL時區(qū):

mysql> show variables like "%time_zone%";
+------------------+--------+
| Variable_name    | Value  |
+------------------+--------+
| system_time_zone | UTC    |
| time_zone        | SYSTEM |
+------------------+--------+

設(shè)置MySQL時間為北京時間

mysql> set global time_zone = '+8:00';
Query OK, 0 rows affected
mysql> set time_zone = '+8:00';
Query OK, 0 rows affected
mysql> flush privileges;?
Query OK, 0 rows affected

再查詢下MySQL時區(qū),驗證下Now返回了北京時間

mysql> show variables like "%time_zone%";
+------------------+--------+
| Variable_name    | Value  |
+------------------+--------+
| system_time_zone | UTC    |
| time_zone        | +08:00 |
+------------------+--------+
mysql> SELECT NOW();
+---------------------+
| NOW()               |
+---------------------+
| 2022-07-19 18:57:35 |
+---------------------+
1 row in set

MySQL時區(qū)的設(shè)置和Docker有關(guān)

這里說下花了我大量時間的坑,也就是這個服務(wù)器的MySQL是通過Docker安裝的,我就懶得去修改MySQL的配置文件了,而配置文件里沒有配置默認(rèn)時區(qū)。

理論上,MySQL就會應(yīng)用本地服務(wù)器的時區(qū),而本地服務(wù)器的時區(qū)已經(jīng)設(shè)置成東八區(qū)了,在系統(tǒng)控制臺我能看到返回的當(dāng)前時間是北京時間了。

問題就在于上面這個“理論”不靠譜,不是的,MySQL依然是返回UTC時間。

我記憶的這個“理論”應(yīng)該是有問題的,但沒有搞清楚具體問題是什么,懷疑是和Dockers有關(guān),如果是直接安裝的MySQL在不配置默認(rèn)時區(qū)時似乎沒有遇到這個問題。

解決辦法:

結(jié)論是不管如何,還是手動在設(shè)置下系統(tǒng)的時區(qū)吧!或者在寫MySQL的配置文件時,增加如下一個配置,然后才能使用Now()函數(shù)。

修改my.cnf文件,加入如下1行:

default-time-zone='+08:00' # 數(shù)據(jù)表默認(rèn)時區(qū)

如果是中途 修改,需要重啟Docker,不能偷懶。

到此這篇關(guān)于MySQL now函數(shù)使用的坑的文章就介紹到這了,更多相關(guān)MySQL now內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評論

宜兴市| 太白县| 阳朔县| 陇西县| 浏阳市| 宁武县| 滁州市| 龙南县| 唐河县| 双柏县| 深水埗区| 依安县| 阳信县| 崇阳县| 云安县| 城口县| 都匀市| 丁青县| 抚顺县| 彰武县| 阿勒泰市| 文山县| 九龙县| 新竹县| 合山市| 舒兰市| 南华县| 肇州县| 安多县| 桦川县| 攀枝花市| 页游| 佛山市| 承德县| 辰溪县| 乡宁县| 资源县| 冕宁县| 荣昌县| 安西县| 木兰县|