1. 程式人生 > 其它 >MySQL中的多種時間和格式資料型別

MySQL中的多種時間和格式資料型別

日期和時間型別是為了方便在資料庫中儲存日期和時間而設計的。MySQL中有多種表示日期和時間的資料型別。

 

 

 

關於上圖的解釋:

1)每種日期和時間型別都有一個有效範圍。如果插入的值超過了這個範圍,系統就會報錯,並將0值插入到資料庫中。

2)不同的日期與時間型別有不同的0值,上表中已經詳細的列出。

1、year型別

year型別使用1個位元組來表示年份,MySQL中以YYYY的形式來顯示year型別的值。

給year型別的欄位賦值的表示方法如下:

1)使用4位字串和數字表示。其範圍從1901~~2155。輸入格式為'YYYY'或YYYY。舉個例子,輸入‘2008’或者2008,可直接儲存2008。如果超過了範圍,就會插入0000。

2)使用2位字串表示。‘00’~~‘69’轉換為2000~~2069,‘70’~~‘99’轉換為1970~1999。舉個例子,輸入‘35’,year值會轉換成2035,輸入‘90’,year值會轉換成1990。‘0’和‘00’效果一樣。

3)使用2位數字表示。1~~69轉換為2001~~2069,70~~99轉換為1970~~1999。不舉例子了,注意,2位數字和2位字串是不一樣的。如果插入0,轉換後的year值不是2000,而是0000。

OK,針對上面的例子,我們來實際操作下資料庫。

CREATE TABLE  `linkinframe`.`test` (
 `id` INT NOT NULL,
`a` year NULL,
PRIMARY KEY (`id`));

現在往該表中插入幾條資料:

INSERT INTO `linkinframe`.`test` (`id`, `a`)  VALUES('1',1989);
INSERT INTO `linkinframe`.`test` (`id`, `a`)  VALUES('2,1990);
INSERT INTO `linkinframe`.`test` (`id`, `a`)  VALUES('3',1900);
INSERT INTO `linkinframe`.`test` (`id`, `a`)  VALUES('4',2156);

year型別是使用總結:

1)顧名思義,我們一般用year型別來表示年份,所以在對該欄位進行相關操作的時候,最好使用4位字串或者數字表示,不要使用2位的字串和數字。

2)有的時候可能會插入0或者‘0’。這裡要嚴格區分0和‘0’,如果向year型別的欄位插入0,存入該欄位的年份是0000;如果向year型別的欄位插入‘0’,存入的年份是2000。

當然字串‘0’和‘00’和‘000’是一樣的效果,但是‘0000’效果不一樣。因為如果是4個0的話就使用了year型別賦值的第一種方式,也就是超過了year型別的範圍,插入了0。

關於這點這裡來舉一個實際的例子吧。

 

2、time型別

time型別使用3個位元組來表示時間。MySQL中以HH:MM:SS的形式顯示Time型別的值。其中,HH表示時;MM表示分,取值範圍為0~~59;SS表示秒,取值範圍是0~~59。
Time型別的範圍可以從‘-838:59:59’~~‘838:59:59’。雖然,小時的範圍是0~~23,但是為了表示某種特殊需要的時間間隔,將Time型別的範圍擴大了。而且還支援了負值。

Time型別的欄位賦值的表示方法如下:

1)‘D HH:MM:SS’格式的字串表示。其中,D表示天數,取值範圍是0~~34。儲存時,小時的值等於(D*24+HH)。舉個例子,輸入‘2 11:30:50’,Time型別會轉換為59:30:50。
當然。輸入時可以不嚴格按照這個格式,也可以是‘HH:MM:SS’,'HH:MM','D HH:MM','D HH','SS'等形式。舉個例子,輸入‘30’,Time型別會自動轉換為00:00:30。

2)‘HHMMSS’格式的字串或HHMMSS格式的數值表示,例如,輸入‘123456’,Time型別會轉換成12:34:56;輸入123456,Time型別會轉換成12:34:56。如果輸入0或者‘0’,那麼TIME型別會轉換為0000:00:00。

3)使用current_time或者current_time()或者now()輸入當前系統時間。

 

3、Date型別

date型別使用4個位元組來表示日期。MySQL中是以YYYY-MM-DD的形式顯示date型別的值。
其中,YYYY表示年,MM表示月,DD表示日。date型別的範圍可以從‘1000-01-01’~~‘9999-12-31’。

給DATE型別的欄位賦值的表示方法如下:

1)‘YYYY-MM-DD’或‘YYYYMMDD’格式的字串表示,這種方式可以表達的範圍是‘1000-01-01’~‘9999-12-31’。
舉個例子,比如現在我輸入‘4008-2-8‘,date型別將轉換為4008-02-08;輸入’40080308‘,date型別將轉換為4008-03-08。

2)當然,MySQL中還支援一些不嚴格的語法格式,任何標點都可以用來做間隔符。如’YYYY/MM/DD‘,’YYYY@MM@DD‘,’YYYY.MM.DD‘等分隔形式。
舉個例子,輸入’2011.3.8‘,date型別將轉換為2011-03-08。

3)’YY-MM-DD‘或者’YYMMDD‘格式的字串表示,其中’YY‘的取值,’00‘~~’69‘轉換為2000~~2069,’70‘~~’99‘轉換為1970~~1999。與year型別類似。
舉個例子,比如現在我輸入’35-01-02‘,date型別將轉換為2035-01-02;輸入’800102‘,date型別將轉換為1980-01-02。

4)同樣的,MySQL中也支援一些不嚴格的語法格式,比如’YY/MM/DD‘,’YY@MM@DD‘,’YY.MM.DD’等分隔形式。例如,輸入‘89@3@8’,date型別將轉換為1989-03-08。

5)YYYYMMDD或YYMMDD格式的數字表示。其中,‘YY’的取值,‘00’~~‘69’轉換為2000~~2069,‘70’~~‘99’轉換為1970~~1999。與year型別類似。
舉個例子,比如現在我輸入20080808,date型別將轉換為2008-08-08;輸入790808,date型別將轉換為1979-08-08;輸入0,那麼date型別會轉化為0000-00-00。

6)使用current_date或now()來輸入當前系統時間。

關於date型別的總結:

1)date型別值戰友4個位元組,如果只需要記錄日期,選擇date型別是最合適的。
2)雖然MySQL支援的DATA型別的一些不嚴格的語法格式,但是,在實際應用中,最好還是選擇標準形式。日期中使用“-”做分隔符,時間用“:”做分隔符,然後中間用空格隔開。

比如下面格式:2016-03-17 16:27:55。當然如果有特殊需要,可以使用“@”,“*”等特殊字元做分隔符。

 

4、Datetime型別

datetime型別使用8個位元組來表示日期和時間。MySQL中以‘YYYY-MM-DD HH:MM:SS’的形式來顯示dateTime型別的值。
從其形式上可以看出,dateTime型別可以直接用date型別和Time型別組合而成。

給dateTime型別的欄位賦值的表示方法如下:

1)‘YYYY-MM-DD HH:MM:SS’或‘YYYYMMDDHHMMSS’格式的字串表示。這種方式可以表達的範圍是‘1000-01-01 00:00:00’~~‘9999-12-31 23:59:59’。
舉個例子,比如我現在輸入‘2008-08-08 08:08:08’,dateTime型別轉換為2008-08-08 08:08:08,輸入‘20080808080808’,同樣轉換為2008-08-08 08:08:08。

2)MySQL中還支援一些不嚴格的語法格式,任何的標點都可以用來做間隔符。情況與date型別相同,而且時間部分也可以使用任意的分隔符隔開,這與Time型別不同,Time型別只能用‘:’隔開呢。
舉個例子,比如我現在輸入‘2008@08@08 08*08*08’,資料庫中dateTime型別統一轉換為2008-08-08 08:08:08。

3)‘YY-MM-DD HH:MM:SS’或‘YYMMDDHHMMSS’格式的字串表示。其中‘YY’的取值,‘00’~~‘69’轉換為2000~~2069,‘70’~~‘99’轉換為1970~~1999。與year型和date型相同。
舉個例子,比如我現在輸入‘69-01-01 11:11:11’,資料庫中插入2069-01-01 11:11:11;比如我現在輸入‘70-01-01 11:11:11’,資料庫中插入1970-01-01 11:11:11。

4)當然這種格式化的省略YY的簡寫也是支援一些不嚴格的語法格式的,比如用‘@’,‘*’來做間隔符。

5)使用now()來輸入當前系統日期和時間。

datetime型別總結:

dateTime型別用來記錄日期和時間,其作用等價於date型別和Time型別的組合。一個dateTime型別的欄位可以用一個date型別的欄位和一個time型別的欄位代替。但是如果需要同時記錄日期和時間,選擇dateTime型別是個不錯的選擇。

 

5、timestamp型別

timestamp型別使用4個位元組來表示日期和時間。timestamp型別的範圍是從1970-01-01 08:00:01~~2038-01-19 11:14:07。

MySQL中也是以‘YYYY-MM-DD HH:MM:SS’的形式顯示timestamp型別的值。從其形式可以看出,timestamp型別與dateTime型別顯示的格式是一樣的。

給timestamp型別的欄位複製的表示方法基本與dateTime型別相同。值得注意的是,timestamp類型範圍比較小,沒有dateTime型別的範圍那麼大。所以輸入值時要保證在timestamp型別的有效範圍內。