接著上文繼續(xù)來梳理,上文我們寫到了日期與時間類型中的
time類型,然后我們接著來寫日期與時間類型中的date類型。
date類型
date類型用在僅需要日期值時,沒有時間部分,在存儲時需要3字節(jié)。
日期格式為YYYY-MM-DD。其中YYYY表示年,MM表示月,DD表示日。
(1)以 'YYYY-MM-DD' 或者 'YYYYMMDD' 字符串格式表示的日期,取值范圍為 '1000-01-01' ~ '9999-12-3' ;例如輸入'2022-12-31'或者‘20221231’,插入數(shù)據(jù)庫的日期都為2022-12-31;
(2)以‘YY-MM-DD’或者‘YYMMDD’字符串格式表示的日期,在這里‘YY’表示兩位的年值。包含兩位年值的日期會令人模糊,因為不知道世紀(jì)。mysql使用以下規(guī)則解釋兩位年值:‘00~69’范圍的年值轉(zhuǎn)換為2000-2069,'70-99'范圍的年值轉(zhuǎn)換為1970~1999。
(3)以YY-MM-DD或者YYMMDD數(shù)字格式表示的日期,與前面相似,00~69范圍的年值轉(zhuǎn)換為2000~2069,70~99范圍的年值轉(zhuǎn)換為1970~1999。
(4)使用CURRENT_DATE或者NOW(),插入當(dāng)前系統(tǒng)日期。
舉個例子:
創(chuàng)建一個名為yunweijia_4的數(shù)據(jù)表;
mysql> create table yunweijia_4 (d date);
Query OK, 0 rows affected (0.03 sec)
mysql>向表中插入一些值;
mysql> insert into yunweijia_4 values ('1999-09-09'), ('19990909'), ('20221010');
Query OK, 3 rows affected (0.01 sec)
Records: 3 Duplicates: 0 Warnings: 0
mysql>然后查看下結(jié)果:
mysql> select * from yunweijia_4;
+------------+
| d |
+------------+
| 1999-09-09 |
| 1999-09-09 |
| 2022-10-10 |
+------------+
3 rows in set (0.00 sec)
mysql>再舉個例子:
刪除數(shù)據(jù)表yunweijia_4中的數(shù)據(jù);
delete from yunweijia_4;在表中插入數(shù)據(jù);
mysql> insert into yunweijia_4 values ('99-09-09'), ('990909'), ('000101'), ('111111');
Query OK, 4 rows affected (0.01 sec)
Records: 4 Duplicates: 0 Warnings: 0
mysql>查看下結(jié)果:
mysql> select * from yunweijia_4;
+------------+
| d |
+------------+
| 1999-09-09 |
| 1999-09-09 |
| 2000-01-01 |
| 2011-11-11 |
+------------+
4 rows in set (0.00 sec)
mysql>又舉個例子:
老規(guī)矩,先刪除表中的數(shù)據(jù)
mysql> delete from yunweijia_4;
Query OK, 4 rows affected (0.01 sec)
mysql>向表中插入數(shù)據(jù);
mysql> insert into yunweijia_4 values (19990909), (990909), (000101), (111111);
Query OK, 4 rows affected (0.01 sec)
Records: 4 Duplicates: 0 Warnings: 0
mysql>查看下結(jié)果:
mysql> select * from yunweijia_4;
+------------+
| d |
+------------+
| 1999-09-09 |
| 1999-09-09 |
| 2000-01-01 |
| 2011-11-11 |
+------------+
4 rows in set (0.00 sec)
mysql>又又舉個例子:
刪除表中數(shù)據(jù);
mysql> delete from yunweijia_4;
Query OK, 4 rows affected (0.01 sec)
mysql>插入系統(tǒng)當(dāng)前時間:
mysql> insert into yunweijia_4 values (current_date()), (now());
Query OK, 2 rows affected, 1 warning (0.01 sec)
Records: 2 Duplicates: 0 Warnings: 1
mysql>查看結(jié)果:
mysql> select * from yunweijia_4;
+------------+
| d |
+------------+
| 2022-07-09 |
| 2022-07-09 |
+------------+
2 rows in set (0.00 sec)
mysql>CURRENT_DATE只返回當(dāng)前日期值,不包括時間部分;NOW()函數(shù)返回日期和時間值,在保存到數(shù)據(jù)庫時,只保留了其日期部分。
datetime類型
DATETIME類型用于需要同時包含日期和時間信息的值,在存儲時需要8字節(jié)。日期格式為‘YYYY-MM-DD HH:MM:SS’。其中,YYYY表示年,MM表示月,DD表示日,HH表示小時,MM表示分鐘,SS表示秒。在給DATETIME類型的字段賦值時,可以使用字符串類型或者數(shù)字類型的數(shù)據(jù)插入,只要符合DATETIME的日期格式即可。
(1)以‘YYYY-MM-DD HH:MM:SS’或者‘YYYYMMDDHHMMSS’字符串格式表示的值,取值范圍為‘1000-01-01 00:00:00’~‘9999-12-3 23:59:59’;
(2)以‘YY-MM-DD HH:MM:SS’或者‘YYMMDDHHMMSS’字符串格式表示的日期,在這里YY表示兩位的年值。與前面相同,‘00~69’范圍的年值轉(zhuǎn)換為‘2000~2069’,‘70~99’范圍的年值轉(zhuǎn)換為‘1970~1999’。
(3)以YYYYMMDDHHMMSS或者YYMMDDHHMMSS數(shù)字格式表示的日期和時間。
TIMESTAMP類型
TIMESTAMP的顯示格式與DATETIME相同,顯示寬度固定在19個字符,日期格式為YYYY-MM-DD HH:MM:SS,在存儲時需要4字節(jié)。TIMESTAMP列的取值范圍小于DATETIME的取值范圍,為‘1970-01-01 00:00:01’UTC~‘2038-01-1903:14:07’UTC。其中,UTC(Coordinated Universal Time)為世界標(biāo)準(zhǔn)時間,因此在插入數(shù)據(jù)時,要保證在合法的取值范圍內(nèi)。
注意點:
由于
datetime類型和TIMESTAMP和上面的用法大差不差,所以這里就不再一一舉例了。
文本字符串類型
字符串類型用來存儲字符串?dāng)?shù)據(jù),除了可以存儲字符串?dāng)?shù)據(jù)之外,還可以存儲其他數(shù)據(jù),比如圖片和聲音的二進(jìn)制數(shù)據(jù)。
mysql支持兩類字符串?dāng)?shù)據(jù):文本字符串和二進(jìn)制字符串;
文本字符串可以進(jìn)行區(qū)分或者不區(qū)分大小寫的串比較,還可以進(jìn)行模式匹配查找。
在mysql中,文本字符串類型指的是:
- CHAR
- VARCHAR
- TEXT
- ENUM
- SET
詳細(xì)可以看下表:

VARCHAR和TEXT類型與BLOB都是變長類型,其存儲需求取決于列值的實際長度(在前面的表格中用L表示),而不是取決于類型的最大可能尺寸。
例如,一個VARCHAR(10)列能保存最大長度為10個字符的字符串,實際的存儲需要是字符串的長度L加上1字節(jié)(記錄字符串的長度)。對于字符“abcd”,L是4而存儲要求是5字節(jié)。
CHAR和VARCHAR類型
CHAR(M)為固定長度字符串,在定義時指定字符串列長。當(dāng)保存時在右側(cè)填充空格,以達(dá)到指定的長度。M表示列長度,M的范圍是0~255個字符。
例如:CAHR(4)定義了一個固定長度的字符串列,其包含的字符個數(shù)最大為4。當(dāng)檢索到CHAR值時,尾部的空格將被刪除。
VARCHAR(M)是長度可變的字符串,M表示最大的列長度。M的范圍是0~65535。VARCHAR的最大實際長度由最長的行的大小和使用的字符集確定,而其實際占用的空間為字符串的實際長度加1。
例如:VARCAHR(50)定義了一個最大長度為50的字符串,如果插入的字符串只有10個字符,則實際存儲的字符串為10個字符和一個字符串結(jié)束字符。VARCHAR在對應(yīng)值保存和檢索時尾部的空格仍保留。
我們看下CHAR(4)和VARCHAR(4)存儲的區(qū)別是什么:

從上圖的對比結(jié)果可以看到,CHAR(4)定義了固定長度為4的列,不管存入的數(shù)據(jù)長度為多少,所占用的空間均為4個字節(jié);VARCHAR(4)定義的列所占的字節(jié)數(shù)為實際長度加1;
但是查詢時是不同的,我們可以通過下面的例子來看下;
舉個例子:
創(chuàng)建一個名為yunweijia_5的數(shù)據(jù)表;
mysql> create table yunweijia_5 (ch char(4), var varchar(4));
Query OK, 0 rows affected (0.03 sec)
mysql>在這個數(shù)據(jù)表中插入一些數(shù)據(jù);
mysql> insert into yunweijia_5 values ('ab', 'ab');
Query OK, 1 row affected (0.01 sec)
mysql>查看下結(jié)果:
mysql> select concat ('(', ch, ')'), concat ('(', var, ')') from yunweijia_5;
+-----------------------+------------------------+
| concat ('(', ch, ')') | concat ('(', var, ')') |
+-----------------------+------------------------+
| (abc) | (abc) |
+-----------------------+------------------------+
1 row in set (0.00 sec)
mysql>這里有問題,文檔上面介紹的是,char在保存的時候會將空格刪除,varchar會保留末尾的空格,但是從自身實踐來看的話,不論是char還是varchar都將末尾的空格給刪除了。
TEXT類型
TEXT列保存非二進(jìn)制字符串,如文章內(nèi)容、評論等。
當(dāng)保存或查詢TEXT列的值時,不刪除尾部空格。
Text類型分為4種:
剩余內(nèi)容請轉(zhuǎn)至VX公眾號 “運(yùn)維家” ,回復(fù) “196” 查看。
------ “運(yùn)維家” ,回復(fù) “196”? ------
------ “運(yùn)維家” ,回復(fù) “196”? ------
------ “運(yùn)維家” ,回復(fù) “196”? ------
濰坊運(yùn)維工程師招聘,硬件運(yùn)維工程師發(fā)展前景,運(yùn)維工程師個人規(guī)劃,深圳陽光雨露運(yùn)維工程師,事業(yè)單位招聘運(yùn)維工程師;
奇安信運(yùn)維工程師面試,三一重工系統(tǒng)運(yùn)維工程師,美亞柏科運(yùn)維工程師面試題,環(huán)境工程的運(yùn)維工程師;
運(yùn)維工程師都有什么方向,杭州運(yùn)維工程師招聘阿里,橋梁運(yùn)維工程師,桌面運(yùn)維工程師培訓(xùn)計劃。