MySQL中的資料型別之日期/時間型別
MySQL中的資料型別主要有:數字型別、日期/時間型別、字串型別。
日期/時間型別
MySQL中的日期和時間型別有date
、time
、datetime
、timestamp
和year
。每一種時間型別都有一定範圍的有效值,也有零值,當你指定一個無效的MySQL表示不了的值的時候,MySQL可能會使用零值。其中timestamp
型別和datetime
型別可以自動更新。
MySQL允許time
、datetime
、timestamp
型別的值有小數秒,最多到微秒精度。定一個列包含小數秒部分,使用語法type_name(fsp),其中type_name可以是time
、datetime
、timestamp
,fsp
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
列,可以通過使用default
和on 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一樣。
注意
:
timestamp
和datetime
最大的區別是: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。 當資料發生溢位和出錯的情況
Mysql中char,varchar與text型別的區別和選用
關於char,varchar與text平時沒有太在意,一般來說,可能現在大家都是用varchar。但是當要儲存的內容比較大時,究竟是選擇varchar還是text呢?不知道。。。。。。 於是去查閱了一些資料,順便將這三種類型做個比較: (1)char: char不用多說
mysql中char,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