色婷婷狠狠18禁久久YY,CHINESE性内射高清国产,国产女人18毛片水真多1,国产AV在线观看

mysql jvm 時(shí)區(qū)

MySQL 與 JVM 中的時(shí)區(qū)問(wèn)題

時(shí)區(qū)是我們?cè)陂_(kāi)發(fā)中經(jīng)常需要考慮的一個(gè)問(wèn)題,因?yàn)闀r(shí)間的概念對(duì)于很多業(yè)務(wù)邏輯都非常重要。MySQL 和 JVM 是我們常用的兩種技術(shù),它們之間的時(shí)區(qū)問(wèn)題也是我們需要關(guān)注的。

MySQL 中的時(shí)區(qū)

MySQL 在存儲(chǔ)時(shí)間類(lèi)型數(shù)據(jù)時(shí),可以為每個(gè)表設(shè)置時(shí)區(qū),也可以設(shè)置全局時(shí)區(qū)。全局時(shí)區(qū)設(shè)置可以使用以下命令:
SET GLOBAL time_zone = 'Asia/Shanghai';
而對(duì)于每張表,我們可以在定義表時(shí)指定時(shí)間類(lèi)型字段的時(shí)區(qū),如下:
CREATE TABLE foo (
id INT,
create_time DATETIME DEFAULT CURRENT_TIMESTAMP,
update_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
) DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
ENGINE=InnoDB ROW_FORMAT=COMPACT
COMMENT='測(cè)試用的表' 
TIME_ZONE='+03:00';

JVM 中的時(shí)區(qū)

Java 中有一個(gè)類(lèi)叫做 TimeZone,可以表示一個(gè)時(shí)區(qū)。在 JRE 中,我們默認(rèn)使用的是系統(tǒng)時(shí)區(qū)。但是在有些情況下,我們需要設(shè)置 JVM 的時(shí)區(qū),可以使用以下參數(shù):
-Duser.timezone=Asia/Shanghai

MySQL 和 JVM 中的時(shí)區(qū)怎么協(xié)調(diào)?

在項(xiàng)目中,我們使用 JDBC 連接 MySQL 數(shù)據(jù)庫(kù)時(shí),Java 中的時(shí)間高精度類(lèi)型 Timestamp 和 MySQL 數(shù)據(jù)庫(kù)中的時(shí)間類(lèi)型 TIMESTAMP 對(duì)應(yīng),兩者都有自己的時(shí)區(qū)偏移。當(dāng)我們使用 SELECT 查詢(xún)時(shí),在獲取時(shí)間類(lèi)型字段時(shí),JDBC 會(huì)自動(dòng)將其轉(zhuǎn)換為 Java 的 Timestamp 類(lèi)型,同時(shí)會(huì)將這個(gè)時(shí)間從 MySQL 的時(shí)區(qū)偏移轉(zhuǎn)換為 UTC 時(shí)間。因此,我們?cè)诒容^時(shí)間時(shí),需要先將 Java 的時(shí)間對(duì)象轉(zhuǎn)換為 UTC 時(shí)間后再進(jìn)行比較。
Java 代碼示例:
// 獲取當(dāng)前時(shí)間
Timestamp ts = new Timestamp(System.currentTimeMillis());
// 轉(zhuǎn)換為 UTC 時(shí)間
ts.setTime(ts.getTime() - TimeZone.getDefault().getRawOffset());