MySQL 是一個(gè)常用的關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng),其中 timestamp 和 time 都是日期時(shí)間類型。它們可以存儲(chǔ)日期和時(shí)間信息,但在設(shè)計(jì)表格時(shí)需要考慮它們的區(qū)別。
時(shí)間戳(timestamp)是在插入或更新數(shù)據(jù)時(shí),自動(dòng)記錄時(shí)間的一個(gè)字段。它使用 Unix 時(shí)間戳格式存儲(chǔ),以1970年1月1日00:00:00 UTC為基準(zhǔn),也就是說時(shí)間戳存儲(chǔ)的是從1970年1月1日00:00:00 UTC到插入或更新時(shí)的秒數(shù)。時(shí)間戳類型會(huì)記錄完整的日期時(shí)間,包括年月日小時(shí)分鐘秒以及毫秒,具有高精度、唯一、自動(dòng)生成的特點(diǎn)。在使用時(shí),需要注意時(shí)間戳的默認(rèn)時(shí)區(qū)和時(shí)區(qū)轉(zhuǎn)換。
CREATE TABLE `example` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(50) DEFAULT NULL, `created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, `updated_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
時(shí)間(time)只記錄日期和時(shí)間的小時(shí)、分鐘和秒信息,對(duì)于時(shí)間戳存儲(chǔ)的毫秒信息則省略不計(jì)。time類型可以存儲(chǔ)正負(fù)值,最大值為838:59:59,最小值為 -838:59:59。它很適合存儲(chǔ)時(shí)間段、時(shí)間差值等場(chǎng)合。
CREATE TABLE `time_example` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(50) DEFAULT NULL, `time_duration` time NOT NULL DEFAULT '00:00:00', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
總的來說,時(shí)間戳更適合于記錄事件的發(fā)生時(shí)間和更新時(shí)間等需要精確時(shí)間戳的情形。時(shí)間字段適用于存儲(chǔ)時(shí)間戳中不需要的日期和時(shí)間信息,更適用于存儲(chǔ)相對(duì)時(shí)間、任務(wù)總耗時(shí)等相對(duì)簡(jiǎn)單的時(shí)間數(shù)據(jù)。