史上最全的mysql數(shù)據(jù)類型匯總(下)

接著上文繼續(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ì)可以看下表:

VARCHARTEXT類型與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)計劃。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容