在有需要得時候,要用到時間和日期類型,比如某個系統得要記錄用戶得註冊時間和用戶上一次登陸得時間等等
那麼在MySQL中到底怎麼用呢?
一.日期和時間類型
日期與時間類型是爲了方便在數據庫中存儲日期和時間而設計的,數據庫有多種表示日期和時間的數據類型。其中,YEAR類型表示年,DATE類型表示日期,TIME類型表示時間,DATETIME和TIMESTAMP表示日期和時間。下面從這5種日期與時間類型的字節數、取值範圍和零值等方面進行對比,如下表所示。
每種日期與時間類型都有一個有效範圍。如果插入的值超過了這個範圍,系統就會報錯,並將零值插入到數據庫中。不同的日期與時間類型均有不同的零值.
插入日期時間時,日期年月日和時間時分秒可以使用 “: - _ / ”中的任意字符來分隔,如果單獨插入時間,則會報錯!!!
mysql> use test; #選擇數據庫test mysql> create table date_example (e_date date, e_datetime datetime, e_timestamp timestamp, e_time time, e_year year); #創建表dt_example mysql> insert into date_example values('2020-5-9', '2020-5-9 15:01:00', '2020-05-09 15:01:00', '15:56:01', 2011); mysql> insert into date_example values('2020_5/9', '2020:5-9 15/01-00', '2020:05/09 15-01_00', '15:56:01', '2011'); #效果同上面插入語句 |
誒? 怎麼都是我們手動插入得時間呢?那就沒有更方便得方式獲取時間嘛?
也可以通過mysql 本身提供的時間函數獲取:
常用的時間函數:
CURDATE() - 獲得當前的DATE, 可直接插入DATE 類型中.
NOW() - 獲得當前的DATETIME, 可直接插入DATETIME 和TIMESTAMP類型中.
TIME() - 獲取參數給定時間串中的時分秒,可直接插入TIME 類型中.
YEAR() - 獲取參數給定時間串中的年份,可直接插入YEAR類型中.
MONTH() 、DAY()、HOUR()、MINUTE()、SECOND() 獲取參數給定時間串中的月、日、時、分、秒值.
demo:
mysql> use test; #選擇數據庫test
mysql> insert into date_example values(CURDATE(), NOW(), NOW(), time(NOW()), YEAR(NOW()) );
我們只要這樣就可以了。
二. CHAR類型和VARCHAR類型
CHAR類型和VARCHAR類型都在創建表時指定了最大長度,其基本形式如下:
1.字符串類型(M)
其中,“字符串類型”參數指定了數據類型爲CHAR類型還是VARCHAR類型;M參數指定了該字符串的最大長度爲M。例如,CHAR(4)就是數據類型爲CHAR類型,其最大長度爲4。
CHAR類型的長度是固定的,在創建表時就指定了。其長度可以是0~255的任意值。例如,CHAR(100)就是指定CHAR類型的長度爲100。CHAR 存儲值時,它們會用空格右填充到指定的長度。
VARCHAR類型的長度是可變的,在創建表時指定了最大長度。定義時,其最大值可以取0~65535之間的任意值。指定VARCHAR類型的最大值以後,其長度可以在0到最大長度之間。例如,VARCHAR(100)的最大長度是100,但是不是每條記錄都要佔用100個字節,而是在這個最大值範圍內使用多少就分配多少。VARCHAR類型實際佔用的空間爲字符串的實際長度加1或2,這樣即可有效節約系統的空間。
值 |
CHAR(4) |
存儲字節數 |
VARCHAR(4) |
存儲字節數 |
‘’ |
‘’ |
4 |
‘’ |
1 |
‘ab’ |
‘ab’ |
4 |
‘ab’ |
3 |
‘abcd’ |
‘abcd’ |
4 |
‘abcd’ |
5 |
‘abcdefgh’ |
- |
#插入失敗 |
- |
#插入失敗 |
mysql> use test; #選擇數據庫test mysql> create table char_example(e_char char(5), v_char varchar(5)); #創建數據庫表 mysql> insert into char_example values('12345','12345'); #正常插入數據 mysql> insert into char_example values('1 2 ','1 2 '); #char類型會屏蔽後面隱藏的空格,varchar 不會 mysql>select concat('(',e_char, ')'), concat('(',v_char, ')') from char_example ; #讓char 後面屏蔽的空格原型畢露 |
實戰建議
- 1、 char一定會使用指定的空間,varchar是根據數據來定空間
- 2、 char的數據查詢效率比varchar高:varchar是需要通過後面的記錄數來計算
- 3、 如果確定數據一定是佔指定長度,那麼使用char類型;
- 4、 如果不確定數據到底有多少,那麼使用varchar類型;
- 5、 如果數據長度超過255個字符而在65535之內,直接使用varchar
- 6、 如果字符串尾部要保留空格,必須選擇varchar
更多的關於數據庫我會在下面的文章中陸續的分享,也可以關注‘奇牛學院’
來一起討論