1. 程式人生 > >【MySQL-5.7】日期與時間型別

【MySQL-5.7】日期與時間型別

MySQL中的日期與時間型別,主要包括:YEAR、TIME、DATE、DATETIME、TIMESTAMP,下表中列出了這幾種型別的屬性。

型別名稱

日期格式

日期範圍

佔用空間

YEAR

YYYY

1901 ~ 2155

1位元組

TIME

HH:MM:SS

-838:59:59 ~ 838:59:59

3位元組

DATE

YYYY-MM-DD

1000-01-01 ~ 9999-12-3

3位元組

DATETIME

YYYY-MM-DD HH:MM:SS

1000-01-01 00:00:00 ~ 9999-12-31 23:59:59

8位元組

TIMESTAMP

YYYY-MM-DD HH:MM:SS

1970-01-01 00:00:01 UTC ~ 2038-01-19 03:14:07  UTC

4位元組

一、YEAR

YEAR型別可以使用三種格式表示:

1. 以4位數字或字串表示,兩者效果相同,表示範圍1901~2155,插入超出範圍的資料會報錯。

2. 以2位字串格式表示,範圍為‘00’~‘99’。‘00’~‘69’表示2000~2069,‘70’~‘99’表示1970~1999。‘0’和‘00’都會被識別為2000,超出範圍的資料也會被識別為2000。

3. 以2位數字格式表示,範圍為1~99。1~69表示2001~2069,70~99表示1970~1999。但0值會被識別為0000,這和2位字串被識別為2000有所不同。

下面是以上三種表示格式的例子:

mysql> create table test1 (id year);
Query OK, 0 rows affected (0.04 sec)
mysql> desc test1;
+-------+---------+------+-----+---------+-------+
| Field | Type    | Null | Key | Default | Extra |
+-------+---------+------+-----+---------+-------+
| id    | year(4) | YES  |     | NULL    |       |
+-------+---------+------+-----+---------+-------+
1 row in set (0.01 sec)

(1)以4位字串或數字格式表示

mysql> insert into test1 values (2010),('2010');
Query OK, 2 rows affected (0.02 sec)
Records: 2  Duplicates: 0  Warnings: 0

mysql> select * from test1;
+------+
| id   |
+------+
| 2010 |
| 2010 |
+------+
2 rows in set (0.00 sec)

mysql> insert into test1 values (2156);
ERROR 1264 (22003): Out of range value for column 'id' at row 1

(2)以2位字串格式表示

mysql> truncate table test1;
Query OK, 0 rows affected (0.04 sec)

mysql> insert into test1 values ('0'),('00'),('10'),('77');
Query OK, 4 rows affected (0.03 sec)
Records: 4  Duplicates: 0  Warnings: 0

mysql> select * from test1;
+------+
| id   |
+------+
| 2000 |
| 2000 |
| 2010 |
| 1977 |
+------+
4 rows in set (0.00 sec)

(3)以2位數字格式表示

mysql> truncate table test1;
Query OK, 0 rows affected (0.02 sec)

mysql> insert into test1 values (0),(00),(10),(77);
Query OK, 4 rows affected (0.01 sec)
Records: 4  Duplicates: 0  Warnings: 0

mysql> select * from test1;
+------+
| id   |
+------+
| 0000 |
| 0000 |
| 2010 |
| 1977 |
+------+
4 rows in set (0.00 sec)

二、TIME

TIME型別可以用多種格式表示,如:

‘D HH:MM:SS':D表示天數,在插入表中時會折算成小時,即:D*24+HH:MM:SS。

'HHMMSS':省略冒號,但各個時間要有意義,比如‘128012’分鐘部分會被識別為‘12:80:12’,80分鐘是沒有意義的,插入會報錯。

'HH:MM':表示小時分鐘,如‘12:08’表示12小時8分鐘。

'SS':表示秒。

需要注意的是:如果輸入‘1208’,雖然我們想讓MySQL識別為12小時8分鐘,但在這種格式下,MySQL識別為‘00:12:08’。

下面是幾個例子:

mysql> create table test2 (id time);
Query OK, 0 rows affected (0.32 sec)

mysql> desc test2;
+-------+------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+------+------+-----+---------+-------+
| id    | time | YES  |     | NULL    |       |
+-------+------+------+-----+---------+-------+
1 row in set (0.02 sec)
mysql> insert into test2 values ('10:47:23'),('23:13'),('2 11:11'),('3 05'),('10');
Query OK, 5 rows affected (0.10 sec)
Records: 5  Duplicates: 0  Warnings: 0

mysql> select * from test2;
+----------+
| id       |
+----------+
| 10:47:23 |
| 23:13:00 |
| 59:11:00 |
| 77:00:00 |
| 00:00:10 |
+----------+
5 rows in set (0.00 sec)

mysql> insert into test2 values ('3 5');
ERROR 1292 (22007): Incorrect time value: '3 5' for column 'id' at row 1
mysql> truncate table test2;
Query OK, 0 rows affected (0.24 sec)

mysql> insert into test2 values ('105821'),(105821),('0');
Query OK, 3 rows affected (0.10 sec)
Records: 3  Duplicates: 0  Warnings: 0

mysql> insert into test2 values (108013);
ERROR 1292 (22007): Incorrect time value: '108013' for column 'id' at row 1

mysql> select * from test2;
+----------+
| id       |
+----------+
| 10:58:21 |
| 10:58:21 |
| 00:00:00 |
+----------+
3 rows in set (0.00 sec)

三、DATE

DATE型別可以通過如下格式表示:

‘YYYY-MM-DD','YYYYMMDD',YYYYMMDD,'YY-MM-DD','YYMMDD',YYMMDD

其中當使用兩位表示年份時,分00~69和70~99兩種,參考YEAR型別。

下面是幾個DATE型別的例子:

mysql> create table test3 (id date);
Query OK, 0 rows affected (0.25 sec)

mysql> desc test3;
+-------+------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+------+------+-----+---------+-------+
| id    | date | YES  |     | NULL    |       |
+-------+------+------+-----+---------+-------+
1 row in set (0.02 sec)
mysql> insert into test3 values ('1992-03-08'),('19920308'),(19920308);
Query OK, 3 rows affected (0.11 sec)
Records: 3  Duplicates: 0  Warnings: 0

mysql> select * from test3;
+------------+
| id         |
+------------+
| 1992-03-08 |
| 1992-03-08 |
| 1992-03-08 |
+------------+
3 rows in set (0.00 sec)
mysql> truncate table test3;
Query OK, 0 rows affected (0.23 sec)
mysql> insert into test3 values ('92-03-08'),('920308'),(920308),('10-12-20');
Query OK, 4 rows affected (0.09 sec)
Records: 4  Duplicates: 0  Warnings: 0

mysql> select * from test3;
+------------+
| id         |
+------------+
| 1992-03-08 |
| 1992-03-08 |
| 1992-03-08 |
| 2010-12-20 |
+------------+
4 rows in set (0.00 sec)

四、DATETIME

DATETIME型別,包含日期和時間部分。可以使用引號字串或數字兩種,年份可以是4位,也可以是2位,在此不再贅述,請參照上面的DATE和TIME型別。下面是幾個例子:

mysql> create table test4 (id datetime);
Query OK, 0 rows affected (0.30 sec)

mysql> desc test4;
+-------+----------+------+-----+---------+-------+
| Field | Type     | Null | Key | Default | Extra |
+-------+----------+------+-----+---------+-------+
| id    | datetime | YES  |     | NULL    |       |
+-------+----------+------+-----+---------+-------+
1 row in set (0.01 sec)
mysql> insert into test4 values ('1992-03-08 11:11:11'),(19920308111111),('19920308111111'),(20101231080808);
Query OK, 4 rows affected (0.10 sec)
Records: 4  Duplicates: 0  Warnings: 0

mysql> select * from test4;
+---------------------+
| id                  |
+---------------------+
| 1992-03-08 11:11:11 |
| 1992-03-08 11:11:11 |
| 1992-03-08 11:11:11 |
| 2010-12-31 08:08:08 |
+---------------------+
4 rows in set (0.00 sec)
mysql> truncate table test4;
Query OK, 0 rows affected (0.19 sec)

mysql> insert into test4 values (920308111111),('92-03-08 11:11:11');
Query OK, 2 rows affected (0.11 sec)
Records: 2  Duplicates: 0  Warnings: 0

mysql> select * from test4;
+---------------------+
| id                  |
+---------------------+
| 1992-03-08 11:11:11 |
| 1992-03-08 11:11:11 |
+---------------------+
2 rows in set (0.00 sec)

五、TIMESTAMP

TIMESTAMP型別和DATETIME型別的表示格式相同,儲存4個位元組(比DATETIME少),取值範圍少於DATETIME型別。TIMESTAMP和DATETIME最大不同於:TIMESTAMP根據時區顯示時間。如果不明白可以看下面的例子:

mysql> create table test5 (id timestamp);
Query OK, 0 rows affected (0.27 sec)

mysql> desc test5;
+-------+-----------+------+-----+-------------------+-----------------------------+
| Field | Type      | Null | Key | Default           | Extra                       |
+-------+-----------+------+-----+-------------------+-----------------------------+
| id    | timestamp | NO   |     | CURRENT_TIMESTAMP | on update CURRENT_TIMESTAMP |
+-------+-----------+------+-----+-------------------+-----------------------------+
1 row in set (0.01 sec)

mysql> insert into test5 values (NOW());
Query OK, 1 row affected (0.06 sec)

mysql> select * from test5;
+---------------------+
| id                  |
+---------------------+
| 2018-03-28 13:16:09 |
+---------------------+
1 row in set (0.00 sec)

#設定為東十區,比東八區快兩個小時。
mysql> set time_zone='+10:00';
Query OK, 0 rows affected (0.00 sec)

mysql> select * from test5;
+---------------------+
| id                  |
+---------------------+
| 2018-03-28 15:16:09 |
+---------------------+
1 row in set (0.00 sec)
總結:日期與時間型別上面說的差不多了,需要補充一點:可以使用current_date(當前日期)、current_time(當前時間)、now()(當前日期和時間,根據欄位型別顯示日期或者時間),向表中插入當前的日期或者時間點。






相關推薦

MySQL-5.7日期時間型別

MySQL中的日期與時間型別,主要包括:YEAR、TIME、DATE、DATETIME、TIMESTAMP,下表中列出了這幾種型別的屬性。型別名稱日期格式日期範圍佔用空間YEARYYYY1901 ~ 21551位元組TIMEHH:MM:SS-838:59:59 ~ 838:5

Mysql 5.7ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.

1、通過mysql -uroot -p,輸入密碼登入後,必須馬上修改密碼,否則會報錯 2、將密碼修改為123456,依然報錯   這和mysql 5.7的密碼策略(validate_password_policy)有關,validate_password_policy可以取如下值:

MySQL 5.7 Reference Manual15.4.2 Change Buffer(變更緩衝)

15.4.2 Change Buffer(變更緩衝)   The change buffer is a special data structure that caches changes to secondary index pages when affected pages are

mysql的五種日期時間型別轉載

[mysql的五種日期和時間型別] mysql(5.5)所支援的日期時間型別有:DATETIME、 TIMESTAMP、DATE、TIME、YEAR。 幾種型別比較如下: 日期時間型別 佔用空間 日期格式 最小值 最大值 零值表示

MySQL數據庫—日期時間函數

替換字符 har 截取 concat 輸入 span 大小寫 power 小數位 一、 日期和時間函數 函數的概念:按指定格式輸入參數,返回正確結果的運算單元 1. 返回當前日期:curdate() current_date()

MySQL 5.7 新增使用者授權

MySQL 5.7 的使用者表mysql.user表沒有password欄位,改成了authentication_string 下面說一下我的具體步驟: 一、建立使用者 建立使用者的命令: CREAT

mysql 5.7 MHA安裝配置

1.   概述它由日本DeNA公司youshimaton(現就職於Facebook公司)開發,MHA來保證資料庫系統的高可用.在宕機的時間內(通常10—30秒內),完成故障切換,部署MHA,可避免主從一致性問題,節約購買新伺服器的費用,不影響伺服器效能,易安裝,不改變現有

solidity教程0.5.7

以太坊不僅是一種加密數字貨幣,它更是功能完備的智慧合約平臺,solidity就是用來開發以太坊上的智慧合約的原生開發語言。soli

mysql 5.7 新特性之 json 型別 基本操作

近幾年來,nosql大行其道,json更是火的一塌糊塗,作為資料庫的元老,mysql在5.7版本中添加了對json資料的支援。這片部落格主要記錄對mysql json型別的學習筆記和總結心得。首先建立一個數據庫learnjson,並建立一張表json_start:create

MySQL 5.7日誌時間本地時間不一致的問題

row variables oba var mps 問題 fec nbsp mysql 5.7 在MySQL 5.7.2 新增了 log_timestamps 這個參數,該參數主要是控制 error log、genera log,等等記錄日誌的顯示時間參數。 在 5.7.2

環境部署centos7安裝mysql-5.7.19 group-replication

mysql初始化 add path data state mysqld _for boot serve --mysql高可用官方文檔: https://dev.mysql.com/doc/refman/5.7/en/group-replication.html mysql

MySqlmysql-5.7.20-winx64安裝配置

查詢 rac ces sql_mode mysql啟動 str -i 版本 image 序:   MySQL在Windows系統上的安裝配置問題。 0x01:   去MySQL的官網下載想要版本的MySQL免安裝文件。https://dev.mysql.com/do

MySQL 5.7在線設置復制過濾

line 調整 count 很大的 can mas 開啟 all repl 轉自 MySQL 5.7在線設置復制過濾 - yayun - 博客園 https://www.cnblogs.com/gomysql/p/4991197.html 5.7也GA了,有許多新的

MySQL數據庫學習補充MySQL 5.7.9版本sql_mode=only_full_group_by問題

bsp lock sql alt glob 當前 log cti src 用到GROUP BY 語句查詢時com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Expression #2 of SELECT

可靠性Mysql 5.7 降低了半同步復制-數據丟失的風險

time 原理 cat jpg 出現 nsa read pos ngs 如果你的生產線開啟了半同步復制,那麽對數據的一致性會要求較高,但在MySQL5.5/5.6裏,會存在數據不一致的風險。有這麽一個場景,客戶端提交了一個事務,master把binlog發送給slave,在

Mac 安裝 MySQL 5.7 後登入後無法執行命令You must reset your password using ALTER USER statement before executing this statement.

question 服務 com flow alter ima 5.7 use sql 今天在 Mac 上安裝了 MySQL 5.7 ,啟動服務後,輸入 mysql -u root -p 後,輸入初始密碼程,嘗試執行 show databases; 報了一個 You mu

MySQL基礎CentOS 7.4 RPM方式安裝MySQL 5.7.19

bae tar -xvf rpm -e create 3.3 general upd tst 版本 1、基本環境準備 操作系統:CentOS 7.4 內核版本3.10..0-693,可使用uname -a命令查看Oracle JDK 1.8_171(建議使用Oracle J

MySQL進階Keepalived1.4.0結合MySQL 5.7.19實現主備高可用

port 腳本 amp ado roo ins log openss net 1、基本環境 數據庫安裝及主備同步接上一篇文章:http://blog.51cto.com/13946719/2309514JDK 1.8_171MySQL 5.7.19CentOS 7.4Kee

首次登入mysql(5.7)或忘記密碼解決方法ubuntu

使用debian-sys-maint登入系統,修改密碼 檢視debian-sys密碼 [email protected]:/etc/mysql$ sudo cat /etc/mysql/deb

mysql學習第9篇MySQL 5.7.9版本sql_mode=only_full_group_by問題

學習 sele 語句 nag ref func res not star MySQL 5.7.9版本sql_mode=only_full_group_by問題 用到GROUP BY 語句查詢時com.mysql.jdbc.exceptions.jdb