共計 5682 個字符,預(yù)計需要花費(fèi) 15 分鐘才能閱讀完成。
這篇文章主要介紹了 mysql 日期類型是什么的相關(guān)知識,內(nèi)容詳細(xì)易懂,操作簡單快捷,具有一定借鑒價值,相信大家閱讀完這篇 mysql 日期類型是什么文章都會有所收獲,下面我們一起來看看吧。
有 5 種類型:1、YEAR,用于表示年,格式為“YYYY”;2、TIME,用于只需要時間信息的值,格式為“HH:MM:SS”;3、DATE,用于僅需要日期值時,格式為“YYYY-MM-DD”;4、DATETIME,用于需要同時包含日期和時間信息的值,格式“YYYY-MM-DD HH:MM:SS”;5、TIMESTAMP,與 DATETIME 類似,用于需要同時包含日期和時間信息的值。
本教程操作環(huán)境:windows7 系統(tǒng)、mysql8 版本、Dell G3 電腦。
MySQL 中有多個表示日期的數(shù)據(jù)類型:YEAR、TIME、DATE、DTAETIME、TIMESTAMP。
類型名稱
日期格式
日期范圍
存儲需求
YEAR
YYYY
1901 ~ 2155
1 個字節(jié)
TIME
HH:MM:SS
-838:59:59 ~ 838:59:59
3 個字節(jié)
DATE
YYYY-MM-DD
1000-01-01 ~ 9999-12-3
3 個字節(jié)
DATETIME
YYYY-MM-DD HH:MM:SS
1000-01-01 00:00:00 ~ 9999-12-31 23:59:59
8 個字節(jié)
TIMESTAMP
YYYY-MM-DD HH:MM:SS
1980-01-01 00:00:01 UTC ~ 2040-01-19 03:14:07 UTC
4 個字節(jié)
YEAR 類型
YEAR 類型是一個單字節(jié)類型,用于表示年,在存儲時只需要 1 個字節(jié)。可以使用各種格式指定 YEAR,如下所示:
以 4 位字符串或者 4 位數(shù)字格式表示的 YEAR,范圍為 1901 ~ 2155。輸入格式為 YYYY 或者 YYYY,例如,輸入 2010 或 2010,插入數(shù)據(jù)庫的值均為 2010。
以 2 位字符串格式表示的 YEAR,范圍為 00 到 99。00 ~ 69 和 70 ~ 99 范圍的值分別被轉(zhuǎn)換為 2000~2069 和 1970~1999 范圍的 YEAR 值。0 與 00 的作用相同。插入超過取值范圍的值將被轉(zhuǎn)換為 2000。
以 2 位數(shù)字表示的 YEAR,范圍為 1~99。1~99 和 70~99 范圍的值分別被轉(zhuǎn)換為 2001~2069 和 1970~1999 范圍的 YEAR 值。注意,在這里 0 值將被轉(zhuǎn)換為 0000,而不是 2000。
提示:兩位整數(shù)范圍與兩位字符串范圍稍有不同。例如,插入 3000 年,讀者可能會使用數(shù)字格式的 0 表示 YEAR,實(shí)際上,插入數(shù)據(jù)庫的值為 0000,而不是所希望的 3000。只有使用字符串格式的 0 或 00,才可以被正確解釋為 3000,非法 YEAR 值將被轉(zhuǎn)換為 0000。
TIME 類型
TIME 類型用于只需要時間信息的值,在存儲時需要 3 個字節(jié)。格式為 HH:MM:SS。HH 表示小時,MM 表示分鐘,SS 表示秒。
TIME 類型的取值范圍為 -838:59:59~838:59:59,小時部分如此大的原因是 TIME 類型不僅可以用于表示一天的時間(必須小于 24 小時),還可能是某個事件過去的時間或兩個事件之間的時間間隔(可大于 24 小時,或者甚至為負(fù))。
可以使用各種格式指定 TIME 值,如下所示。
D HH:MM:SS 格式的字符串。還可以使用這些“非嚴(yán)格”的語法:HH:MM:SS、HH:MM、D HH 或 SS。這里的 D 表示日,可以取 0~34 之間的值。在插入數(shù)據(jù)庫時,D 被轉(zhuǎn)換為小時保存,格式為“D*24+HH”。
HHMMSS 格式、沒有間隔符的字符串或者 HHMMSS 格式的數(shù)值,假定是有意義的時間。例如,101112 被理解為 10:11:12,但是 106112 是不合法的(它有一個沒有意義的分鐘部分),在存儲時將變?yōu)?00:00:00。
提示:為 TIME 列分配簡寫值時應(yīng)注意:如果沒有冒號,MySQL 解釋值時,假定最右邊的兩位表示秒。(MySQL 解釋 TIME 值為過去的時間而不是當(dāng)前的時間)。例如,讀者可能認(rèn)為 1112 和 1112 表示 11:12:00(即 11 點(diǎn)過 12 分鐘),但 MySQL 將它們解釋為 00:11:12(即 11 分 12 秒)。同樣 12 和 12 被解釋為 00:00:12。相反,TIME 值中如果使用冒號則肯定被看作當(dāng)天的時間,也就是說,11:12 表示 11:12:00,而不是 00:11:12。
示例
讓我們看一下在 TIME 表中使用數(shù)據(jù)類型的示例。
首先,創(chuàng)建一個新表命名為 tests 一個由四列:id,name,start_at,和 end_at。start_at 和 end_at 列的數(shù)據(jù)類型是 TIME。
CREATE TABLE tests (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(255) NOT NULL,
start_at TIME,
end_at TIME
);
其次,在 tests 表中插入一行。
INSERT INTO tests(name,start_at,end_at)
VALUES(Test 1 , 08:00:00 , 10:00:00
第三,從 tests 表中查詢數(shù)據(jù)。
SELECT
name, start_at, end_at
tests;
DATE 類型
DATE 類型用于僅需要日期值時,沒有時間部分,在存儲時需要 3 個字節(jié)。日期格式為 YYYY-MM-DD,其中 YYYY 表示年,MM 表示月,DD 表示日。
在給 DATE 類型的字段賦值時,可以使用字符串類型或者數(shù)字類型的數(shù)據(jù)插入,只要符合 DATE 的日期格式即可。如下所示:
以 YYYY-MM-DD 或者 YYYYMMDD 字符中格式表示的日期,取值范圍為 1000-01-01 ~ 9999-12-3。例如,輸入 2015-12-31 或者 20151231,插入數(shù)據(jù)庫的日期為 2015-12-31。
以 YY-MM-DD 或者 YYMMDD 字符串格式表示日期,在這里 YY 表示兩位的年值。MySQL 解釋兩位年值的規(guī)則:00~69 范圍的年值轉(zhuǎn)換為 2000~2069,70~99 范圍的年值轉(zhuǎn)換為 1970~1999。例如,輸入 15-12-31,插入數(shù)據(jù)庫的日期為 2015-12-31;輸入 991231,插入數(shù)據(jù)庫的日期為 1999-12-31。
以 YYMMDD 數(shù)字格式表示的日期,與前面相似,00~69 范圍的年值轉(zhuǎn)換為 2000~2069,80~99 范圍的年值轉(zhuǎn)換為 1980~1999。例如,輸入 151231,插入數(shù)據(jù)庫的日期為 2015-12-31,輸入 991231,插入數(shù)據(jù)庫的日期為 1999-12-31。
使用 CURRENT_DATE 或者 NOW(),插入當(dāng)前系統(tǒng)日期。
示例
我們來看看下面的例子。
首先,創(chuàng)建一個新表名為 people,其中出生日期列為 DATE 數(shù)據(jù)類型。
CREATE TABLE people (
id INT AUTO_INCREMENT PRIMARY KEY,
first_name VARCHAR(50) NOT NULL,
last_name VARCHAR(50) NOT NULL,
birth_date DATE NOT NULL
);
接下來,在 people 表中插入一行。
INSERT INTO people(first_name,last_name,birth_date)
VALUES(John , Doe , 1990-09-01
然后,查詢數(shù)據(jù)來自 people 表。
SELECT
first_name,
last_name,
birth_date
people;
之后,使用兩位數(shù)年份格式將數(shù)據(jù)插入 people 表中。
INSERT INTO people(first_name,last_name,birth_date)
VALUES(Jack , Daniel , 01-09-01),
(Lily , Bush , 80-09-01
在第一行中,我們使用 01(范圍 00-69)作為年份,因此 MySQL 將其轉(zhuǎn)換為 2001 年。在第二行中,我們使用 80(范圍 70-99)作為年份,MySQL 將其轉(zhuǎn)換為 1980 年。
最后,我們可以從 people 表中查詢數(shù)據(jù),以檢查數(shù)據(jù)是否已根據(jù)轉(zhuǎn)換規(guī)則進(jìn)行轉(zhuǎn)換。
SELECT
first_name,
last_name,
birth_date
people;
DATETIME 類型
DATETIME 類型用于需要同時包含日期和時間信息的值,在存儲時需要 8 個字節(jié)。日期格式為 YYYY-MM-DD HH:MM:SS,其中 YYYY 表示年,MM 表示月,DD 表示日,HH 表示小時,MM 表示分鐘,SS 表示秒。
在給 DATETIME 類型的字段賦值時,可以使用字符串類型或者數(shù)字類型的數(shù)據(jù)插入,只要符合 DATETIME 的日期格式即可,如下所示。
以 YYYY-MM-DD HH:MM:SS 或者 YYYYMMDDHHMMSS 字符串格式表示的日期,取值范圍為 1000-01-01 00:00:00 ~ 9999-12-3 23:59:59。例如,輸入 2014-12-31 05:05:05 或者 20141231050505’,插入數(shù)據(jù)庫的 DATETIME 值都為 2014-12-31 05:05:05。
以 YY-MM-DD HH:MM:SS 或者 YYMMDDHHMMSS 字符串格式表示的日期,在這里 YY 表示兩位的年值。與前面相同,00~79 范圍的年值轉(zhuǎn)換為 2000~2079,80~99 范圍的年值轉(zhuǎn)換為 1980~1999。例如,輸入 14-12-31 05:05:05,插入數(shù)據(jù)庫的 DATETIME 為 2014-12-31 05:05:05;輸入 141231050505,插入數(shù)據(jù)庫的 DATETIME 為 2014-12-31 05:05:05。
以 YYYYMMDDHHMMSS 或者 YYMMDDHHMMSS 數(shù)字格式表示的日期和時間。例如,輸入 20141231050505,插入數(shù)據(jù)庫的 DATETIME 為 2014-12-31 05:05:05;輸入 140505050505,插入數(shù)據(jù)庫的 DATETIME 為 2014-12-31 05:05:05。
DATETIME 值可以包括具有 YYYY-MM-DD HH:MM:SS[.fraction] 例如的格式的尾隨小數(shù)秒到微秒 2015-12-20 10:01:00.999999。包含小數(shù)秒精度時,DATETIME 值需要更多存儲空間,如下表所示:
分?jǐn)?shù)秒精度存儲 (字節(jié))001, 213, 425, 63
例如,2015-12-20 10:01:00.999999 需要 8 個字節(jié),5 個字節(jié)用于 2015-12-20 10:01:00,3 個字節(jié)用于.999999 而 2015-12-20 10:01:00.9 只需要 6 個字節(jié),1 個字節(jié)用于小數(shù)秒精度。
TIMESTAMP 類型
TIMESTAMP 的顯示格式與 DATETIME 相同,顯示寬度固定在 19 個字符,日期格式為 YYYY-MM-DD HH:MM:SS,在存儲時需要 4 個字節(jié)。但是 TIMESTAMP 列的取值范圍小于 DATETIME 的取值范圍,為 1970-01-01 00:00:01 UTC~ 2038-01-19 03:14:07 UTC。在插入數(shù)據(jù)時,要保證在合法的取值范圍內(nèi)。
提示:協(xié)調(diào)世界時(英:Coordinated Universal Time,法:Temps Universel Coordonné)又稱為世界統(tǒng)一時間、世界標(biāo)準(zhǔn)時間、國際協(xié)調(diào)時間。英文(CUT)和法文(TUC)的縮寫不同,作為妥協(xié),簡稱 UTC。
TIMESTAMP 與 DATETIME 除了存儲字節(jié)和支持的范圍不同外,還有一個最大的區(qū)別是:
DATETIME 在存儲日期數(shù)據(jù)時,按實(shí)際輸入的格式存儲,即輸入什么就存儲什么,與時區(qū)無關(guān);
而 TIMESTAMP 值的存儲是以 UTC(世界標(biāo)準(zhǔn)時間)格式保存的,存儲時對當(dāng)前時區(qū)進(jìn)行轉(zhuǎn)換,檢索時再轉(zhuǎn)換回當(dāng)前時區(qū)。即查詢時,根據(jù)當(dāng)前時區(qū)的不同,顯示的時間值是不同的。
提示:如果為一個 DATETIME 或 TIMESTAMP 對象分配一個 DATE 值,結(jié)果值的時間部分被設(shè)置為 00:00:00,因此 DATE 值未包含時間信息。如果為一個 DATE 對象分配一個 DATETIME 或 TIMESTAMP 值,結(jié)果值的時間部分被刪除,因此 DATE 值未包含時間信息。
MySQL TIMESTAMP 以 UTC 值存儲。但是,MySQL 將 DATETIME 值存儲為沒有時區(qū)的值。我們來看下面的例子。
首先,將當(dāng)前連接的時區(qū)設(shè)置為 +00:00。
SET time_zone = +00:00
接下來,創(chuàng)建一個表命名 timestamp_n_datetime 是由兩列組成:ts 與 dt 用 TIMESTAMP 和 DATETIME 使用下面的語句類型。
CREATE TABLE timestamp_n_datetime (
id INT AUTO_INCREMENT PRIMARY KEY,
ts TIMESTAMP,
dt DATETIME
);
然后,將當(dāng)前日期和時間插入 timestamp_n_datetime 表的兩個 ts 和每 dt 列,
INSERT INTO timestamp_n_datetime(ts,dt)
VALUES(NOW(),NOW());
之后,從 timestamp_n_datetime 表中查詢數(shù)據(jù)。
SELECT
ts,
dt
timestamp_n_datetime;
DATETIME 和 TIMESTAMP 列中的值都相同。
最后,將連接的時區(qū)設(shè)置為 +03:00 并再次從 timestamp_n_datetime 表中查詢數(shù)據(jù)。
SET time_zone = +03:00
SELECT
ts,
dt
timestamp_n_datetime;
如您所見,TIMESTAMP 列中的值不同。這是因?yàn)楫?dāng)我們更改時區(qū)時,TIMESTAMP 列以 UTC 格式存儲日期和時間值,根據(jù)新時區(qū)調(diào)整列的值。
這意味著如果您使用 TIMESTAMP 數(shù)據(jù)存儲日期和時間值,則在將數(shù)據(jù)庫移動到位于不同時區(qū)的服務(wù)器時應(yīng)認(rèn)真考慮。
關(guān)于“mysql 日期類型是什么”這篇文章的內(nèi)容就介紹到這里,感謝各位的閱讀!相信大家對“mysql 日期類型是什么”知識都有一定的了解,大家如果還想學(xué)習(xí)更多知識,歡迎關(guān)注丸趣 TV 行業(yè)資訊頻道。