1. 程式人生 > >MySQL中的資料型別之日期/時間型別

MySQL中的資料型別之日期/時間型別

MySQL中的資料型別主要有:數字型別、日期/時間型別、字串型別。

日期/時間型別

MySQL中的日期和時間型別有datetimedatetimetimestampyear。每一種時間型別都有一定範圍的有效值,也有零值,當你指定一個無效的MySQL表示不了的值的時候,MySQL可能會使用零值。其中timestamp型別和datetime型別可以自動更新。

MySQL允許timedatetimetimestamp型別的值有小數秒,最多到微秒精度。定一個列包含小數秒部分,使用語法type_name(fsp),其中type_name可以是timedatetimetimestampfsp

是小數秒的精度,例如:

mysql> create table t_fsp (t time(3),dt datetime(6));
Query OK, 0 rows affected (0.02 sec)

mysql> desc t_fsp;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| t     |
time(3) | YES | | NULL | | | dt | datetime(6) | YES | | NULL | | +-------+-------------+------+-----+---------+-------+ 2 rows in set (0.00 sec) mysql> insert into t_fsp values(now(),now()); Query OK, 1 row affected (0.01 sec) #t列有3位小數,dt列有6位小數 mysql> select * from t_fsp;
+--------------+----------------------------+ | t | dt | +--------------+----------------------------+ | 19:45:04.000 | 2018-11-01 19:45:04.000000 | +--------------+----------------------------+ 1 row in set (0.00 sec)

fsp的值,如果指定的話,必須在0~6範圍內,0表示沒有小數秒,如果不指定fsp,預設為0。

  • date
    日期型別,支援的範圍是’1000-01-01’~‘9999-12-31’。MySQL用’YYYY-MM-DD’的格式顯示date型別,但是允許使用字串或數字向date型別的列賦值。如:
mysql> create table t_date(d date);
Query OK, 0 rows affected (0.02 sec)

#使用字串'20181101'和數字20181102都可以插入成功
#並且由於MySQL允許不太嚴格的語法,使得任意標點都可以
#用作日期各部分之間的分割符,下面的'-','@','/'都可以。
mysql> insert into t_date values('20181101'),(20181102),('2018-11-03'),('[email protected]@21'),('2018/11/22');
Query OK, 5 rows affected (0.00 sec)
Records: 5  Duplicates: 0  Warnings: 0

mysql> select * from t_date;
+------------+
| d          |
+------------+
| 2018-11-01 |
| 2018-11-02 |
| 2018-11-03 |
| 2018-11-21 |
| 2018-11-22 |
+------------+
5 rows in set (0.00 sec)
  • datetime [(fsp)]
    日期(date)和時間(time)的組合型別。支援的範圍是: ‘1000-01-01 00:00:00.000000’\~’9999-12-31 23:59:59.999999’。MySQL用’YYYY-MM-DD HH:MM:SS[.fraction]’ 這樣的格式顯示datetime型別的值(fraction表示小數部分),但是也允許用字串或數字向datetime型別的列賦值。例如:
mysql> create table t_datetime(dt datetime);
Query OK, 0 rows affected (0.02 sec)

mysql> desc t_datetime;
+-------+----------+------+-----+---------+-------+
| Field | Type     | Null | Key | Default | Extra |
+-------+----------+------+-----+---------+-------+
| dt    | datetime | YES  |     | NULL    |       |
+-------+----------+------+-----+---------+-------+
1 row in set (0.01 sec)

#注意,下面兩個值一個是字串,一個是數字都可以插入表中。
mysql> insert into t_datetime values('20181101200211'),(20181101200213);
Query OK, 2 rows affected (0.00 sec)
Records: 2  Duplicates: 0  Warnings: 0

mysql> select * from t_datetime;
+---------------------+
| dt                  |
+---------------------+
| 2018-11-01 20:02:11 |
| 2018-11-01 20:02:13 |
+---------------------+
2 rows in set (0.00 sec)

對於datetime列,可以通過使用defaulton update來自動初始化和更新到當前時間,例如:

mysql> create table t1(id int,
    -> dt_1 datetime default current_timestamp,
    -> dt_2 datetime default current_timestamp on update current_timestamp);
Query OK, 0 rows affected (0.01 sec)

mysql> insert into t1(id) values(1),(2);
Query OK, 2 rows affected (0.00 sec)
Records: 2  Duplicates: 0  Warnings: 0
#可以看到dt_1、dt_2列都有當前時間作為預設值,因為設定了default current_timestamp
mysql> select * from t1;
+------+---------------------+---------------------+
| id   | dt_1                | dt_2                |
+------+---------------------+---------------------+
|    1 | 2018-11-01 20:13:12 | 2018-11-01 20:13:12 |
|    2 | 2018-11-01 20:13:12 | 2018-11-01 20:13:12 |
+------+---------------------+---------------------+
2 rows in set (0.00 sec)

mysql> update t1 set id = 11 where id =1;
Query OK, 1 row affected (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 0
#可以看到id=11的這一行因為更新了id,dt_2列也跟著更新了時間,因為dt_2列定義
#的時候設定了on update
mysql> select * from t1;
+------+---------------------+---------------------+
| id   | dt_1                | dt_2                |
+------+---------------------+---------------------+
|   11 | 2018-11-01 20:13:12 | 2018-11-01 20:13:35 |
|    2 | 2018-11-01 20:13:12 | 2018-11-01 20:13:12 |
+------+---------------------+---------------------+
2 rows in set (0.00 sec)
  • timestamp [(fsp)]
    時間戳型別,表示的範圍為:‘1970-01-01 00:00:01.000000’ UTC 到 ‘2038-01-19 03:14:07.999999’ UTC。 時間戳的值儲存的時候是儲存從’1970-01-01 00:00:00’ UTC紀元開始的秒數。一個時間戳不能表示’1970-01-01 00:00:00’因為它等於距離紀元0秒,然而0被用來表示’0000-00-00 00:00:00’,即時間戳型別的零值。
    fsp和datetime的含義一樣。自動初始化和自動更新的定義也和datetime一樣。

注意
timestampdatetime最大的區別是:datetime在儲存日期資料時,按實際輸入的格式儲存,即輸入什麼就儲存什麼,與時區無關;而timestamp值的儲存是以UTC(世界標準時間)格式儲存的,儲存時對當前時區進行轉換,檢索時再轉換回當前時區,即查詢時,根據當前時區的不同,顯示的時間值是不同的。

日期/時間型別所佔空間

資料型別 MySQL 5.6.4版本之前所需空間 MySQL 5.6.4及以後版本所需空間
year 1 位元組 1 位元組
date 3 位元組 3 位元組
time 3 位元組 3 位元組 + 小數秒儲存空間
datetime 8 位元組 5 位元組 + 小數秒儲存空間
timestamp 4 位元組 4 位元組 + 小數秒儲存空間

相關推薦

MySQL資料型別日期/時間型別

MySQL中的資料型別主要有:數字型別、日期/時間型別、字串型別。 日期/時間型別 MySQL中的日期和時間型別有date、time、datetime、timestamp和year。每一種時間型別都有一定範圍的有效值,也有零值,當你指定一個無效的MySQL表示不

mysql資料型別日期時間型別

常用的日期時間型別: DATE ;TIME; DATETIME ;TIMESTAMP 。 (1)根據實際需要選擇滿足應用的最小儲存的日期型別 (2)記錄年份比較久遠,最好要使用DATETIME。因為TIMESTAMP表示的日期範圍要短很多。 (3)如果讓不同的時區保持

史上最簡單的 MySQL 教程(十)「列型別 日期時間型」

溫馨提示:本系列博文已經同步到 GitHub,地址為「mysql-tutorial」,歡迎感興趣的童鞋Star、Fork,糾錯。 列型別(資料型別) 所謂的列型別,其實就是指資料型別,即對資料進行統一的分類,從系統的角度出發是為了能夠使用統一的方式進

Mysql 建表時,日期時間型別選擇

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

【小家SQL】MySql資料型別---日期時間型別的使用(含datetime和timestamp的區別)

每篇一句 練武不練功,到老一場空。 程式設計師應該注重內功的修煉,那才是核心競爭力 說在前面 在這一路學習過來,每次不管看書還是網上看的資料,對於MySQL資料型別中的時間日期型別總是一掃而過,不曾停下來認認真真的研究學習。最近看了一本關於MySql的書

MySQL - 日期時間型別與格式化

【1】MySQL中的日期時間型別 MySQL中常用的幾種時間型別有:date、datetime、time、year、timestamp; ① 詳細解釋 Datetime : 時間日期型,格式是YYYY-mm-dd HH:ii:ss,表示的範圍是從1000到9999。但是有零值,0000-

Java與MySQL資料對接時的時間型別資料

使用java.util.Date與MySQL資料庫的時間欄位對接時,獲取到的時間是格林格式的,還需要進行一下轉換才能使用為本地時間,偶然發現一篇部落格,這引用一下java.sql.date 以前從MySQL中查詢出來的時間日期型別,都放在java.util.Date型別裡面了。這樣帶

MySQL 幾種日期時間型別之間的區別

mysql(5.5)所支援的日期時間型別有:DATETIME、 TIMESTAMP、DATE、TIME、YEAR。 幾種型別比較如下: 日期時間型別 佔用空間 日期格式 最小值 最大值 零值表示  DATETIME  8 bytes  YYYY-MM-DD HH:MM:SS  1000-01-01

MYSQL資料型別介紹

一、MySQL的資料型別 主要包括以下五大類: 整數型別:BIT、BOOL、TINY INT、SMALL INT、MEDIUM INT、 INT、 BIG INT 浮點數型別:FLOAT、DOUBLE、DECIMAL 字串型別:CHAR、VARCHAR、TIN

mysql 資料型別tinyint(2)括號的數字意思

mysql tinyint smallint int bigint型別位元組最小值最大值  (帶符號的/無符號的)(帶符號的/無符號的)TINYINT1-1281270255SMALLINT2-3276832767065535MEDIUMINT3-8388608838860

SQL Server日期時間型別

一. 資料型別 SQL Server008在上一個版本的基礎上把日期時間類的資料型別增加到了六個。除了SQL Server2005的datetime和smalltime之外,加了date,datetime2,time和datetimeoffset。

Mysql資料型別括號的數字代表的含義

我們平時用sql語句建資料庫的時候,總是會寫到int(11),varchar(200)。但是括號裡面的值具體代表什麼意思呢?我感覺我是’知其然而不知其所以然’。 首先,我們建立一個數據表test: mysql> CREATE TABLE test(

Java 資料型別浮點型別

在Java中有兩種浮點型別,分別為float和double,分別佔4個位元組和8個位元組,double型別的精度值為float型別的兩倍。 float型別的數值後面有一個字尾F或者f,沒有後綴F的浮點數值預設為double型別。也可以在浮點數值後面新增字尾D或d。 當資料發生溢位和出錯的情況

Mysqlchar,varchar與text型別的區別和選用

關於char,varchar與text平時沒有太在意,一般來說,可能現在大家都是用varchar。但是當要儲存的內容比較大時,究竟是選擇varchar還是text呢?不知道。。。。。。 於是去查閱了一些資料,順便將這三種類型做個比較: (1)char:  char不用多說

mysqlchar,varchar與text型別的區別

text 、 char、varchar 是資料在資料庫中的存放策略問題,設定資料型別的目的為了合理應用儲存空間,是資料庫伺服器資料型別劃分的方式。對於應用程式,把它們和string對應就可以了。 三種類型做個比較 (1)char: char不用多說了,它是定

JSR310 java8日期時間型別概念初探

Tiago Fernandez做過一次投票,選舉最爛的JAVA API,排第一的EJB2.X,第二的就是日期API。 原本的java日期API槽點太多,列舉有: 1.最開始的時候,Date既要承載日期資訊,又要做日期之間的轉換,還要做不同日期格式的顯示,職責較繁雜,違背單一原則 2.年份

.NET C#呼叫sap的webservices獲取資料,對於sap時間型別的處理

1.問題 呼叫sap的webservices,由於程式環境無法直接在專案中引用地址。故採用,在伺服器拿到wsdl檔案,後生成c#本地的形式。 問題一:如何生成代理類 問題二:生成代理類,編寫程式。在正式環境使用時,卻發現無法找到地址,無法使用 問題三:sap時間型別生成代理類後自動轉

日期時間型別與格式化

【1】MySQL中的日期時間型別 MySQL中常用的幾種時間型別有:date、datetime、time、year、timestamp; ① 詳細解釋 Datetime : 時間日期型,格式是YYYY-mm-dd HH:ii:ss,表示的範圍是從1000到9

Informix資料表結構分析資料整理欄位型別說明和查詢SQL語句

查詢所有Informix資料表字段型別SQL語句: select a.tabname,b.colname,b.coltype,case   b.coltype when '0' then 'CHAR' when '1' then 'SMALLINT' when '2' the

MySQL毫秒值和日期的指定格式的相互轉換及其時間函式

DAYOFWEEK(date)  返回日期date的星期索引(1=星期天,2=星期一, ……7=星期六)。這些索引值對應於ODBC標準。  mysql> select DAYOFWEEK('1998-02-03');  -> 3  WEEKDAY(date)  返回date的星期索引(0