亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁(yè) > 數(shù)據(jù)庫(kù) > MySQL > 正文

MySQL入門(mén)(二) 數(shù)據(jù)庫(kù)數(shù)據(jù)類(lèi)型詳解

2024-07-25 19:08:42
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

序言

今天去健身了,感覺(jué)把身體練好還是不錯(cuò)的,閑話不多說(shuō),把這個(gè)數(shù)據(jù)庫(kù)所遇到的數(shù)據(jù)類(lèi)型今天統(tǒng)統(tǒng)在這里講清楚了,以后在看到什么數(shù)據(jù)類(lèi)型,咱度應(yīng)該認(rèn)識(shí),對(duì)我來(lái)說(shuō),最不熟悉的應(yīng)該就是時(shí)間類(lèi)型這塊了。但是通過(guò)今天的學(xué)習(xí),已經(jīng)解惑了。下面就跟著我的節(jié)奏去把這個(gè)拿下吧。

  ---WH

一、數(shù)據(jù)類(lèi)型

MySQL的數(shù)據(jù)類(lèi)型有大概可以分為5種,分別是 整數(shù)類(lèi)型、浮點(diǎn)數(shù)類(lèi)型和定點(diǎn)數(shù)類(lèi)型、日期和時(shí)間類(lèi)型、字符串類(lèi)型、二進(jìn)制類(lèi)型?,F(xiàn)在可以來(lái)看看你對(duì)這5種類(lèi)型的熟悉程度,哪個(gè)看起來(lái)懵逼了,那就說(shuō)明自己哪個(gè)不熟悉,不理解?! ?/p>


注意:整數(shù)類(lèi)型和浮點(diǎn)數(shù)類(lèi)型可以統(tǒng)稱(chēng)為數(shù)值數(shù)據(jù)類(lèi)型,這不難理解。

數(shù)值數(shù)據(jù)類(lèi)型

  整數(shù)類(lèi)型:TINYINT、SMALLINT、MEDIUMINT、INT、BIGINT

  浮點(diǎn)數(shù)類(lèi)型:FLOAT、DOUBLE

  定點(diǎn)小數(shù):DECIMAL

日期/時(shí)間類(lèi)型

  YEAR、TIME、DATE、DATETIME、TIMESTAMP

字符串類(lèi)型

  CHAR、VARCHAR、TEXT、ENUM、SET等   

二進(jìn)制類(lèi)型

  BIT、BINARY、VARBINARY、BLOB

1、整數(shù)類(lèi)型

MySQL,數(shù)據(jù)庫(kù),數(shù)據(jù)類(lèi)型

不管你學(xué)什么語(yǔ)言,在基礎(chǔ)方面,都應(yīng)該知道 1個(gè)字節(jié)= 8位二進(jìn)制數(shù)。 每個(gè)類(lèi)型的取值范圍也就能夠知道,比如 TINYINT占用1個(gè)字節(jié),也就是8位,2的8次方減1等于255,也就是說(shuō)如果代表沒(méi)符號(hào)的整數(shù),該取值范圍為0~255,如果是有符號(hào)的,最高位為符號(hào)號(hào)位,也就是2的7次方減1,也就是127,取值范圍為-128~127, 為什么需要減1,這個(gè)問(wèn)題就需要考慮臨界值的問(wèn)題了。而考慮臨界值問(wèn)題又有需要討論原碼補(bǔ)碼反碼的知識(shí),這些度不是我們討論的重點(diǎn),所以在這就自行百度。給出一張范圍表,給大家做參考。

不同整數(shù)類(lèi)型的取值范圍

MySQL,數(shù)據(jù)庫(kù),數(shù)據(jù)類(lèi)型

根據(jù)自己所需去選取不同的類(lèi)型名稱(chēng),

  例如:

CREATE TABLE aaa( id INT(10) PRIMARY KEY, age INT(6)  );

  這個(gè)例子中INT(10)、INT(6) 括號(hào)中的數(shù)字表示的是該數(shù)據(jù)類(lèi)型指定的顯示寬度,指定能夠顯示的數(shù)值中數(shù)字的個(gè)數(shù)。這里要注意:顯示寬度和數(shù)據(jù)類(lèi)型的取值范圍是無(wú)關(guān)的,顯示寬度只是指明MySQL最大可能顯示的數(shù)字個(gè)數(shù),注意是可能。通俗點(diǎn)講就是,比如這個(gè)age字段,顯示寬度為6,但是如果你插入的數(shù)據(jù)大于6,達(dá)到了8,6666 6666,那也沒(méi)關(guān)系,只要插入的數(shù)值的位數(shù)不超過(guò)該類(lèi)型整數(shù)的取值范圍,就行,如果插入的數(shù)值長(zhǎng)度是4,或者3,數(shù)值的位數(shù)小于指定的寬度,后面的位數(shù)就會(huì)由空格填空,5555插入age字段,存的就是"5555 "后面用空格補(bǔ)齊。還有一點(diǎn),這個(gè)顯示寬度沒(méi)限制,你寫(xiě)100度沒(méi)問(wèn)題,但是插入數(shù)據(jù)時(shí),實(shí)際起控制作用的還是數(shù)據(jù)類(lèi)型的取值范圍。如果不寫(xiě)顯示寬度,就會(huì)用系統(tǒng)默認(rèn)的,比如,INT的默認(rèn)顯示寬度是11,看上面表,最高也就能表示10位大小的數(shù)值,但是要注意,有符號(hào)的,也就是負(fù)數(shù)時(shí),符號(hào)位也占一位。

2、浮點(diǎn)數(shù)類(lèi)型和定點(diǎn)數(shù)類(lèi)型

 MySQL,數(shù)據(jù)庫(kù),數(shù)據(jù)類(lèi)型 

2.1解釋M,D的意思:

M:數(shù)值的總位數(shù)。 通俗點(diǎn)講,就是看有多少個(gè)數(shù)字,比如,5.6789,M就是5
D:小數(shù)點(diǎn)后面能保留幾位。 比如上面的5.6789 ,D就是4。 這只是舉一個(gè)例子,來(lái)說(shuō)明M,D是什么,實(shí)際是先有M,D的,然后在來(lái)控制數(shù)值,而不是更具數(shù)值來(lái)確定M,D。

不單單就MECIMAL有M,D這兩個(gè)參數(shù),F(xiàn)LOAT 和 DOUBLE 度有,看下面例子

比如:

   CREATE TABLE tmp(
  x FLOAT(3,1),
  y DOUBLE(5,3),
  z DECIMAL(5,4)
   );

假設(shè)x插入的值為:5.69,56.78,5.438,349.2 (注意:實(shí)驗(yàn)給x這個(gè)字段插入的值,可能實(shí)驗(yàn)了三次,不要錯(cuò)看成x的值為5.69,y為56.78等等了)
實(shí)際上在數(shù)據(jù)庫(kù)中存的值為:5.7,56.9,5.3,349.2這個(gè)報(bào)錯(cuò)
分析:x的M為3,D為1,那么小數(shù)點(diǎn)上必須是占了一位數(shù)字,就算沒(méi)有值,也會(huì)用0來(lái)填充,所以說(shuō),整數(shù)位上最多就只能是2位,這里要切記要先根據(jù)D的值,來(lái)算整數(shù)位能最多有多少位。

通過(guò)分析x,y和z也就簡(jiǎn)單了,

y字段上的值,整數(shù)部分最多是2位,小數(shù)點(diǎn)后的位數(shù)最多是3位,也就是說(shuō)小數(shù)點(diǎn)后超過(guò)了3位,就會(huì)四舍五入。
z字段上的值,整數(shù)部分最多只能是一位,小數(shù)點(diǎn)后的位數(shù)最多是4位,如果不足4位,也會(huì)用0補(bǔ)充。比如插入1.56,在數(shù)據(jù)庫(kù)中存的就是1.5600, 比如插入25.46,這個(gè)就會(huì)報(bào)錯(cuò),因?yàn)檎麛?shù)部分只能是一位,小數(shù)點(diǎn)后的位數(shù)已經(jīng)占了4位了。這里要搞清楚。

2.2、FLOAT、DOUBLE、DECIMAL三者的區(qū)別。

都是用來(lái)表示我們所說(shuō)的小數(shù)的也就是浮點(diǎn)數(shù),但是三種的精度不一樣,也就是后面顯示的位數(shù)不一樣,

區(qū)別一:

FLOAT顯示后面的小數(shù)點(diǎn)位大概在40多位,

DOUBLE能顯示的就是300多位了,不是一個(gè)層次上的,

DECIMAL這個(gè)小數(shù)點(diǎn)后面能顯示的位數(shù)跟DOUBLE差不多,

區(qū)別二:

   FLOAT和DOUBLE在不指定精度時(shí),也就是不用(M,D),默認(rèn)會(huì)按照實(shí)際的精度,也就是你寫(xiě)多少就是多少,而DECIMAL如不指定精度默認(rèn)為(10,0),也就是如果不指定精度,插入數(shù)值56.89,在數(shù)據(jù)庫(kù)中存儲(chǔ)的就是57。所以一般使用DECIMAL時(shí)就會(huì)指定精度,而使用FLOAT和DOUBLE就不用。

區(qū)別三:

   浮點(diǎn)數(shù)相對(duì)與定點(diǎn)數(shù)(DECIMAL)的優(yōu)點(diǎn)就是在長(zhǎng)度一定的情況下,浮點(diǎn)數(shù)能夠表示更大的數(shù)據(jù)范圍,但是缺點(diǎn)是會(huì)引起精度問(wèn)題。

   2.3、什么時(shí)候使用FLOAT、DOUBLE、DECIMAL

   對(duì)精度要求比較高的時(shí)候,比如貨幣、科學(xué)數(shù)據(jù)等,使用DECIMAL的類(lèi)型比較好。其他的時(shí)候,看你要存放的數(shù)據(jù)的大小而定了,一般使用DOUBLE。并且在使用浮點(diǎn)數(shù)時(shí)需要注意,盡量避免做浮點(diǎn)數(shù)的比較,比如加、減,誰(shuí)大誰(shuí)小,這樣的操作,會(huì)引起精度缺失。相信在一些程序語(yǔ)言中,遇到過(guò)float精度丟失的問(wèn)題?! ?/p>

3、日期與時(shí)間類(lèi)型

MySQL,數(shù)據(jù)庫(kù),數(shù)據(jù)類(lèi)型

現(xiàn)在有些東西看不懂沒(méi)關(guān)系,大概有個(gè)了解先,接下來(lái)一一進(jìn)行講解。

3.1、YEAR 

   3.1.1、重點(diǎn)看他的存儲(chǔ)范圍,1901~2155. 在插入該數(shù)值時(shí),有兩種方式,一種是用字符串來(lái)代表插入的YEAR值,另一種是用數(shù)字代表YEAR值,其中字符串插入的可以用單引號(hào)和雙引號(hào),沒(méi)區(qū)別,跟一些程序設(shè)計(jì)語(yǔ)言不一樣,單個(gè)字符就必須用單引號(hào),多字符就要用雙引號(hào),在MySQL中,單雙引號(hào)度表示字符。

例子:

  CREATE TABLE tmp(
   y YEAR
   );  

向表中插入數(shù)據(jù):INSERT INTO tmp VALUES(2010),('2010'),("2010");
查詢(xún)表中數(shù)據(jù):SELECT * FROM tmp;
能查看三條記錄度插入到數(shù)據(jù)庫(kù)tmp表中了。注意:這里插入數(shù)據(jù)和查詢(xún)數(shù)據(jù)操作還沒(méi)學(xué)過(guò),如果不知道,可以暫時(shí)跳過(guò),直接看結(jié)論。

MySQL,數(shù)據(jù)庫(kù),數(shù)據(jù)類(lèi)型 

如果向表中插入超出范圍的值,2166則會(huì)報(bào)錯(cuò)

MySQL,數(shù)據(jù)庫(kù),數(shù)據(jù)類(lèi)型

3.1.2、在插入完整年份時(shí),用字符串和用數(shù)字代表YEAR值的效果是一樣的,但是當(dāng)省略YEAR值時(shí),用這兩種方式就不一樣了。

例子一:就拿上面那張tmp表來(lái)說(shuō)。向表中插入用字符串代表的YEAR值,''0' 、'00'、 '77'、 '10'
刪除表中數(shù)據(jù):DELETE FROM tmp;
向表中插入數(shù)據(jù):INSERT INTO tmp VALUES('0'),('00'),('77'),('10');

MySQL,數(shù)據(jù)庫(kù),數(shù)據(jù)類(lèi)型

結(jié)果:

插入的字符'0'、'00'變成了2000
插入的字符'77'變成了1977
插入的字符'10'變成了2010

例子二:

向tmp表中y字段插入2位數(shù)字表示YEAR值,0,00,78,11
刪除表中數(shù)據(jù):DELETE FROM tmp;
向表中插入數(shù)據(jù):INSERT INTO tmp VALUES(0),(00),(77),(11);

MySQL,數(shù)據(jù)庫(kù),數(shù)據(jù)類(lèi)型

結(jié)果:

插入的數(shù)字0、00變成了0000
插入的數(shù)字77變成了1977
插入的數(shù)字11變成了2011

結(jié)論:在省略寫(xiě)年份時(shí),

1、用字符表示和用數(shù)字表示的區(qū)別就在于0。如果是字符0或字符00,則在數(shù)據(jù)庫(kù)中會(huì)生成2000,如果是數(shù)字0或00,則會(huì)生成0000. 
2、在不超過(guò)70,也就是小于70,度會(huì)生成2000年以上,也就是如果是69,則生成2069.如果是70以上包含70,就會(huì)變成1970以上。比如70,就會(huì)變?yōu)?970。也就是00-69范圍的年值轉(zhuǎn)換為2000~2069. 70-99范圍的年值轉(zhuǎn)換為1970~1999
3、一般我們?nèi)绻褂?,也就用全稱(chēng),這樣不容易混淆,但是得知道有這些特性

3.2、TIME    

格式:HH:MM:SS HH表示小時(shí) 、MM表示分鐘、SS表示秒

取值范圍:-838:59:59 ~ 838:59:59

解釋?zhuān)哼@里的時(shí)間不僅僅可以用來(lái)表示一天的時(shí)間(也就是24小時(shí)),還可能是某件事情過(guò)去的時(shí)間或兩個(gè)事件之間的時(shí)間間隔,通俗點(diǎn)講,我們平常每天的時(shí)間就是從凌晨0點(diǎn)就重新開(kāi)始計(jì)時(shí),計(jì)滿(mǎn)24個(gè)小時(shí),然后又重新開(kāi)始,也就相當(dāng)于當(dāng)前我們看到的時(shí)間是凌晨0點(diǎn)過(guò)去的時(shí)間,也就是距凌晨0點(diǎn)過(guò)去了多少個(gè)小時(shí)。 早上7點(diǎn),也就是距離凌晨0點(diǎn)這件事7個(gè)小時(shí),以此類(lèi)推,直到距離了24個(gè)小時(shí),然后重新開(kāi)始計(jì)算。 在MySQL中,這個(gè)TIME就不局限于每天距離凌晨0點(diǎn)多長(zhǎng)時(shí)間了,可以是過(guò)去某個(gè)時(shí)間距離現(xiàn)在多長(zhǎng)時(shí)間了,比如昨天早上7點(diǎn),距離現(xiàn)在上午9.00多長(zhǎng)時(shí)間了,就超過(guò)了24小時(shí),所以。這個(gè)TIME的取值范圍就比我們所理解的24小時(shí)更大。

3.2.1、表示TIME有很多種格式,上面的HH:MM:SS只是標(biāo)準(zhǔn)的一種,

  1、D HH:MM:SS :D表示日、天數(shù)。在數(shù)據(jù)庫(kù)中存儲(chǔ)時(shí),D會(huì)被轉(zhuǎn)換為小時(shí)保存,D*24+HH

  2、HH:MM 、D:HH、 SS :這些格式度是可以的,注意最后一個(gè),如果是單獨(dú)就是2個(gè)數(shù)字,那么就代表的是秒,比如"20"那就代表的是00:00:20

  3、HHMMSS: 這是沒(méi)有間隔符的字符串或者數(shù)值,比如101112會(huì)被理解為10:11:12,但是109712就是不合法的,因?yàn)榉昼娢簧铣^(guò)了59。存儲(chǔ)時(shí)會(huì)報(bào)錯(cuò)。這個(gè)沒(méi)有冒號(hào)時(shí)需要注意一點(diǎn),數(shù)值的最右邊兩位表示秒,以此類(lèi)推,比如 5523 表示的是00:55:23而不是55:23:00。 所以說(shuō)上面SS格式時(shí)代表的是秒就是這樣來(lái)的,從最右邊看起。如果有冒號(hào),則從左邊小時(shí)開(kāi)始看起,比如 55:23 就是代表的55:23:00

例如:

  CREATE TABLE tmp(

t TIME

  );

  插入值"10:05:05"、"23:23"、"2 10:10"、"3 02"、"10"、"101112"、"109712"
  INSERT INTO tmp VALUES("10:05:05"),("23:23"),("2 10:10"),("3 02"),("10"),("101112");
  SELECT * FROM tmp;  

MySQL,數(shù)據(jù)庫(kù),數(shù)據(jù)類(lèi)型 

可以看出:都是如我們預(yù)期的那樣顯示數(shù)據(jù)?! ?/p>

3.2.2、使用系統(tǒng)的函數(shù),插入當(dāng)前的時(shí)間。

  DELETE FROM tmp;

  INSERT INTO tmp VALUES(CURRENT_TIME),(NOW());

  SELECT * FROM tmp;

MySQL,數(shù)據(jù)庫(kù),數(shù)據(jù)類(lèi)型

3.3、DATE

格式:YYYY-MM-DD  YYYY表示年份  MM表示月份  DD表示日

取值范圍:1000-01-01~9999-12-3

  使用字符或者數(shù)值的數(shù)據(jù)度可以插入

注意:這個(gè)除了標(biāo)準(zhǔn)格式之外,跟TIME一樣YEAR一樣,在年份這里也有其省略格式,其規(guī)則和YEAR中一樣。00-69范圍的年值轉(zhuǎn)換為2000~2069. 70-99范圍的年值轉(zhuǎn)換為1970~1999。 例如:12-12-31 表示2012-12-31 981231表示1998-12-31

也可以使用CURRENT_DATE或者NOW()插入當(dāng)前的系統(tǒng)日期。

例子:(注意,每次創(chuàng)建表之前,會(huì)把之前的老表給刪除掉,這里省略掉了,使用DROP TABLE 表名; )

   CREATE TABLE tmp(
 d DATE
  ?。?

   INSERT INTO tmp VALUES("1998-08-08"),(19980808),(100511),(CURRENT_DATE),(NOW());
   SELECT * FROM tmp;

MySQL,數(shù)據(jù)庫(kù),數(shù)據(jù)類(lèi)型

注意:MySQL允許“不嚴(yán)格”語(yǔ)法,也就是任何標(biāo)點(diǎn)符號(hào)度可以當(dāng)用日期部分之間的間隔符,比如"98.11.23"、"98/11/31"、"98@11@31"都可以,自己可以去嘗試嘗試,但是一般使用標(biāo)準(zhǔn)格式比較好,讓人看起來(lái)舒服。

3.4、DATETIME  

格式:YYYY-MM-DD HH:MM:SS

取值范圍:1000-01-01 00:00:00~9999-12-3 23:59:59

  這個(gè)不用做多解釋?zhuān)驗(yàn)檫@個(gè)就是DATE和TIME的結(jié)合體。其各種特點(diǎn)在這里也能夠適合。但是注意HH:MM:SS 只能表示一天的時(shí)間,也就最多到23:59:59.

例子:

   CREATE TABLE tmp(

 dt DATETIME

  ?。?

   INSERT INTO tmp VALUES("1998-08-08 08-08-08"),(980808080808),(CURRENT_DATE()),(NOW());

   SELECT * FROM tmp;

MySQL,數(shù)據(jù)庫(kù),數(shù)據(jù)類(lèi)型

注意:MySQL允許“不嚴(yán)格”語(yǔ)法,也就是任何標(biāo)點(diǎn)符號(hào)度可以當(dāng)用日期部分之間的間隔符,比如"98.11.23"、"98/11/31"、"98@11@31"都可以,自己可以去嘗試嘗試,但是一般使用標(biāo)準(zhǔn)格式比較好,讓人看起來(lái)舒服。

3.4、DATETIME  

格式:YYYY-MM-DD HH:MM:SS

取值范圍:1000-01-01 00:00:00~9999-12-3 23:59:59

  這個(gè)不用做多解釋?zhuān)驗(yàn)檫@個(gè)就是DATE和TIME的結(jié)合體。其各種特點(diǎn)在這里也能夠適合。但是注意HH:MM:SS 只能表示一天的時(shí)間,也就最多到23:59:59.

例子:

   CREATE TABLE tmp(

 dt DATETIME

  ?。?

   INSERT INTO tmp VALUES("1998-08-08 08-08-08"),(980808080808),(CURRENT_DATE()),(NOW());

   SELECT * FROM tmp;

MySQL,數(shù)據(jù)庫(kù),數(shù)據(jù)類(lèi)型

CURRENT_DATE()返回的是當(dāng)前系統(tǒng)的日期 格式 YYYY-MM-DD 所以在前面打印YEAR和DATE度可以用到該函數(shù),因?yàn)榘似鋽?shù)據(jù)類(lèi)型所要的信息

 NOE()返回當(dāng)前系統(tǒng)的日期和時(shí)間值,格式為YYYY-MM-DD HH:MM:SS,所以在這里能夠使用其輸出DATETIME類(lèi)型的值。

   3.5、TIMESTAMP

 格式:YYYY-MM-DD HH:MM:SS

 取值范圍:1970-01-01 00:00:01 UTC ~ 2038-01-19 03:14:17 UTC

 解釋?zhuān)猴@示寬度固定在 19個(gè)字符。也就是這個(gè)輸出標(biāo)準(zhǔn)格式,UTC表示世界標(biāo)準(zhǔn)時(shí)間,這個(gè)跟DATETIME基本上一樣,但是有一個(gè)最大的區(qū)別,我們需要知道。

 區(qū)別:存儲(chǔ)字節(jié)和支持的范圍不一樣,最重要的區(qū)別在DATETIME在存儲(chǔ)日期數(shù)據(jù)時(shí),按實(shí)際輸入的格式存儲(chǔ),即輸入什么就存儲(chǔ)什么,也就輸出什么,與時(shí)區(qū)無(wú)關(guān),而TIMESTAMP值的存儲(chǔ)是以UTC格式保存,存儲(chǔ)時(shí)會(huì)對(duì)當(dāng)前時(shí)區(qū)進(jìn)行轉(zhuǎn)換,檢索時(shí)再轉(zhuǎn)換回當(dāng)前時(shí)區(qū),也就是查詢(xún)時(shí),會(huì)根據(jù)當(dāng)前時(shí)區(qū)的不同,顯示的時(shí)間值不同。 時(shí)區(qū)的意思就是,你在美國(guó)和你在中國(guó)兩邊的時(shí)間顯示不一樣,你在美國(guó)有在美國(guó)的時(shí)間,比中國(guó)快多長(zhǎng)時(shí)間,比如在中國(guó)才早上8點(diǎn),在美國(guó)可能就是晚上8.9點(diǎn)了(這個(gè)只是打個(gè)比方,準(zhǔn)備轉(zhuǎn)換時(shí)間我沒(méi)去看。)

 例如:

  CREATE TABLE tmp(
    ts TIMESTAMP
  );

  INSERT INTO tmp VALUES(NOW());
  SELECT * FROM tmp;

MySQL,數(shù)據(jù)庫(kù),數(shù)據(jù)類(lèi)型

  轉(zhuǎn)換時(shí)區(qū)

MySQL,數(shù)據(jù)庫(kù),數(shù)據(jù)類(lèi)型

可以看到,如我們所想,輸出時(shí)間變了,增加了兩個(gè)小時(shí),這個(gè)是關(guān)于什么東10區(qū),東8區(qū)等,我也不懂這些時(shí)差,總之能夠得出結(jié)論就行了。

也就是說(shuō),TIMESTAMP和DATETIME其實(shí)差不多,就是一個(gè)時(shí)區(qū)的差別。TIMESTAMP也叫時(shí)間戳。以后遇到它我們就應(yīng)該知道是什么東西了

4、字符串類(lèi)型

有CHAR、CARCHAR、TINYTEXT、TEXT、MEDIUMTEXT、LONGTEXT、ENUM、SET

MySQL,數(shù)據(jù)庫(kù),數(shù)據(jù)類(lèi)型

4.1、CHAR和VARCHAR

CHAR(M):為固定長(zhǎng)度字符串,固定長(zhǎng)度的意思就是M的值為多少,那么該M的值就是其實(shí)際存儲(chǔ)空間的值,就算插入的數(shù)據(jù)少于M位,其存儲(chǔ)空間還是那么大,多余的用空格補(bǔ)齊。在輸出時(shí),空格將被刪除不輸出。M最大為255,比如char(4),如果插入abc,則存儲(chǔ)的值為'abc '后面多了一個(gè)空格,輸出還是‘abc', 存儲(chǔ)空間還是占4個(gè)字節(jié)。M最大為255
VARCHAR(M):長(zhǎng)度可變的字符串,跟CHAR相反,會(huì)根據(jù)實(shí)際的大小值來(lái)確定存儲(chǔ)空間的大小,比如 VARCHAR(4),插入'ab',則存儲(chǔ)空間為3字節(jié),看上面圖就知道VARCHAR會(huì)多一個(gè)字節(jié)用來(lái)存儲(chǔ)長(zhǎng)度,M最大為65535.
注意:字符串跟數(shù)值類(lèi)型不一樣,M為多大,就最多能插入多少字符,超過(guò)了M,就會(huì)報(bào)錯(cuò)

例子:

CREATE TABLE tmp(ch CHAR(4),vch VARCHAR(4);); INSERT INTO tmp VALUES('asdf','asdfg');

結(jié)果報(bào)錯(cuò):

MySQL,數(shù)據(jù)庫(kù),數(shù)據(jù)類(lèi)型

INSERT INTO tmp VALUES('ab ','ab ');

SELECT concat( '(', ch ,')' ),concat( '(',vch,')' ) FROM tmp;//這句話的意思就用(將結(jié)果包起來(lái),用來(lái)觀察輸出的字符長(zhǎng)度)

MySQL,數(shù)據(jù)庫(kù),數(shù)據(jù)類(lèi)型  

說(shuō)明,CHAR不能夠存儲(chǔ)空格字符,而VARCHAR可以?!       ?/p>

4.2、TEXT

    text分四種:TINYTEXT、TEXT、MEDIUMTEXT和LONGTEXT
      TINYTEXT:255字符
      TEXT:65535字符
      MEDIUNTEXT:16777215字符
      LONGTEXT:4294967295,大概4GB的字符

    也就是說(shuō),比如我們要存一本小說(shuō),那么就需要使用上面四種中的一種來(lái)存儲(chǔ),選取MEDIUNTEXT或者LONGTEXT差不多。

4.3、ENUM

    枚舉,格式:字段名 ENUM('值1','值2','值3'...,'值n'); n最多為65535
    例如:

      CREATE TABLE tmp(
        enm ENUM('first','second','third');
     ?。?      

      解釋?zhuān)篹nm字段的數(shù)據(jù)類(lèi)型為ENUM,枚舉類(lèi)型,那么在插入該字段中的值只能為枚舉中的這幾個(gè)值,不能插入別得值,否則報(bào)錯(cuò)

      INSERT INTO tmp VALUES('first'),('FIRST');
      SELECT * FROM tmp;

MySQL,數(shù)據(jù)庫(kù),數(shù)據(jù)類(lèi)型

MySQL不區(qū)分大小寫(xiě)。

INSERT INTO tmp VALUES('four');

報(bào)錯(cuò):

MySQL,數(shù)據(jù)庫(kù),數(shù)據(jù)類(lèi)型

例子二:

CREATE TABLE tmp(  soc INT,  level ENUM('excellent','good','bad'));INSERT INTO tmp VALUES(70,2),(90,1),(55,3);SELECT * FROM tmp;

MySQL,數(shù)據(jù)庫(kù),數(shù)據(jù)類(lèi)型

使用索引值,也可以選擇枚舉中得值,從1開(kāi)始,不是0,注意這點(diǎn)

總結(jié):使用ENUM類(lèi)型就是為了限制字段上的值的取值范圍,只能取我們所規(guī)定的值。

4.4、SET

格式:字段名 SET('值1','值2','值3','值4'...,'值n') n最大為64
通過(guò)例子來(lái)講解這個(gè)SET的特點(diǎn)

CREATE TABLE tmp(  s SET('a','b','c','d'););INSERT INTO tmp VALUES('a'),('a,b,a'),('c,a,d');SELECT * FROM tmp;

MySQL,數(shù)據(jù)庫(kù),數(shù)據(jù)類(lèi)型

a 變成 a
a,b,a 變成 a,b
c,a,d 變成 a,c,d

結(jié)論:

1、插入SET字段中的值如果有重復(fù),則會(huì)自動(dòng)刪除重復(fù)的值
2、插入SET字段中的值會(huì)按順序排列,排列規(guī)則就是按照SET中的值的排列優(yōu)先順序

INSERT INTO tmp VALUES('a,x,b');

報(bào)錯(cuò):

MySQL,數(shù)據(jù)庫(kù),數(shù)據(jù)類(lèi)型

結(jié)論:

3、如果插入了不屬于SET中的值,就會(huì)報(bào)錯(cuò)

SET的特性就上面所說(shuō)的三點(diǎn)   

5、二進(jìn)制類(lèi)型  

用來(lái)存放二進(jìn)制數(shù),也就是01010這種。有BIT、BINARY、VARBINARY、TINYBLOB、BLOB、MEDIUNBLOB和LONGBLOB

MySQL,數(shù)據(jù)庫(kù),數(shù)據(jù)類(lèi)型   

5.1、BIT類(lèi)型 

位字段類(lèi)型,M表示插入值的位數(shù),最大為64位,默認(rèn)值為1,如果插入值小于M位,值的左邊用0填充,

 例子:

CREATE TABLE tmp(b BIT(4));

解釋?zhuān)?位的二進(jìn)制,也就是能夠保存0到15之間的值。

INSERT INTO tmp VALUES(2),(10),(15);       
SELECT BIN(b+0) FROM tmp;

MySQL,數(shù)據(jù)庫(kù),數(shù)據(jù)類(lèi)型

解釋?zhuān)何覀儗?,10,15這三個(gè)10進(jìn)制存入數(shù)據(jù)表中,其字段為BIT類(lèi)型,所以在表中存放的是二進(jìn)制數(shù),但是將其顯示出來(lái),要先將二進(jìn)制數(shù)轉(zhuǎn)換為對(duì)應(yīng)的數(shù)字的值,也就是通過(guò)b+0, 然后在通過(guò)BIN()函數(shù)將數(shù)字轉(zhuǎn)換為二進(jìn)制。我們可以嘗試不用BIN()函數(shù),只用b+0,看輸出什么

SELECT b+0 FROM tmp;

MySQL,數(shù)據(jù)庫(kù),數(shù)據(jù)類(lèi)型 

5.2、BINARY和VARBINARY類(lèi)型

格式:字段 BINARY(M)或者VARBINARY(M)

這兩個(gè)跟CHAR和VARCHAR類(lèi)似,

  BINARY:長(zhǎng)度是固定的,指定長(zhǎng)度后,不足最大程度的,將在它們右邊填充"/0"來(lái)達(dá)到指定長(zhǎng)度,

  VARBINARY:長(zhǎng)度是可變的,制定好長(zhǎng)度后,其長(zhǎng)度可以在0到最大值之間,例如,指定字段數(shù)據(jù)類(lèi)型為VARBINARY(20),如果插入的值的長(zhǎng)度只有10,則實(shí)際存儲(chǔ)空間為10加1,即實(shí)際占用的空間為字符串的實(shí)際長(zhǎng)度加1.

說(shuō)了這么多,但是還是不明白這兩個(gè)有什么用處,現(xiàn)在來(lái)告訴你,我們說(shuō)MySQL中對(duì)大小寫(xiě)不敏感,但是這兩個(gè)數(shù)據(jù)類(lèi)型卻對(duì)大小寫(xiě)敏感,原因是他們是用二進(jìn)制來(lái)保存數(shù)據(jù)的,比如A和a,兩個(gè)的二進(jìn)制就不一樣。所以在很多時(shí)候我們需要區(qū)分大小寫(xiě)的時(shí)候,就會(huì)用到該類(lèi)型。

注意:這兩個(gè)類(lèi)型的長(zhǎng)度計(jì)算的是字節(jié)長(zhǎng)度,一個(gè)字符等于2個(gè)字節(jié),比如BINARY(4)這個(gè)表示能夠存放4個(gè)字節(jié)的長(zhǎng)度,也就是只能存放2個(gè)漢字??梢源?個(gè)字母。不要把這個(gè)長(zhǎng)度當(dāng)成二進(jìn)制位的長(zhǎng)度了,說(shuō)是二進(jìn)制字符串的意思是,用二進(jìn)制來(lái)進(jìn)行存儲(chǔ),但是其長(zhǎng)度約束是字節(jié)長(zhǎng)度。

例子:

  CREATE TABLE tmp(    b BINARY(10) ?。?  INSERT INTO tmp VALUES('a');  select * from tmp WHERE b='A';

MySQL,數(shù)據(jù)庫(kù),數(shù)據(jù)類(lèi)型

解釋?zhuān)涸趖mp表中存放了一個(gè)小寫(xiě)a,然后通過(guò)大寫(xiě)A查找表中,看是否能找到a,結(jié)果找不到,就驗(yàn)證了我們上面的說(shuō)法,具有區(qū)分大小寫(xiě)的功能。

總結(jié):BINARY和VARBINARY的主要作用就是用來(lái)區(qū)分大小寫(xiě)的,其他沒(méi)什么作用,但是使用時(shí)要注意限制其大小的是字節(jié)數(shù),而不是二進(jìn)制位,它存儲(chǔ)的格式是用二進(jìn)制來(lái)存儲(chǔ)的。這兩個(gè)不要搞混淆了。

 5.3、BLOB類(lèi)型

是一個(gè)二進(jìn)制大對(duì)象,TINYBLOB(32kb)、BLOB(64kb)、MEDIUMBLOB(16M)和LONGBLOB(4GB)。一般存儲(chǔ)的是一些圖像,音頻文件。

二、如何選擇數(shù)據(jù)類(lèi)型      

1、整數(shù)和浮點(diǎn)數(shù)

  如果不需要小數(shù)部分,則使用整數(shù)來(lái)保存數(shù)據(jù),并且根據(jù)整數(shù)的大小,來(lái)選擇合適的整數(shù)類(lèi)型,如果需要小數(shù)部分,則使用浮點(diǎn)數(shù)類(lèi)型,浮點(diǎn)數(shù)類(lèi)型中,有float和double,如果需要精度高一點(diǎn),則選擇double。根據(jù)自己的需求來(lái)決定選什么。

2、浮點(diǎn)數(shù)和定點(diǎn)數(shù)

  浮點(diǎn)數(shù)FLOAT、DOUBLE相對(duì)應(yīng)定點(diǎn)數(shù)DECIMAL的優(yōu)勢(shì)在于:在長(zhǎng)度一定的情況下,浮點(diǎn)數(shù)能表示更大的數(shù)據(jù)范圍,但是浮點(diǎn)數(shù)容易產(chǎn)生誤差,因此在精度比較高時(shí),建議使用DECIMAL,比如貨幣這一類(lèi)東西,就用DECIMAL比較合理,注意浮點(diǎn)數(shù)在進(jìn)行加減運(yùn)算時(shí)也容易出現(xiàn)問(wèn)題。如果進(jìn)行數(shù)值比較,也建議用DECIMAL

3、日期與時(shí)間類(lèi)型

  可以看上面詳解時(shí)的圖,根據(jù)各種格式,選擇自己所需要的數(shù)據(jù)類(lèi)型,注意TIMESTAMP和DATETIME的區(qū)別,一個(gè)是跟時(shí)區(qū)有關(guān),一個(gè)無(wú)關(guān),其他沒(méi)什么大的區(qū)別。

4、CHAR與VARCHAR之間的特點(diǎn)與選擇

  區(qū)別:

    CHAR是固定長(zhǎng)度字符、VARCHAR是可變長(zhǎng)度字符。CHAR會(huì)自動(dòng)刪除插入數(shù)據(jù)的尾部空格,VARCHAR不會(huì)。 
    CHAR是固定長(zhǎng)度,處理速度比VARCHAR更快,缺點(diǎn)很明顯,浪費(fèi)存儲(chǔ)空間,所以對(duì)存儲(chǔ)不大,但在速度上有要求的可以使用CHAR類(lèi)型,反之用VARCHAR。

5、ENUM和SET

   ENUM只能取單值,也就是從枚舉類(lèi)型中選取其中一個(gè)值,但是SET可以取多值,
   ENUM最多能存放65535個(gè)成員,SET只能65個(gè)
   空字符串也能在SET中存儲(chǔ),

   要存儲(chǔ)一個(gè)人的喜愛(ài)時(shí),最好使用SET類(lèi)型,其實(shí)最重要的是看具體的情況在選取最為合適的把

6、BLOB和TEXT

   BLOB是二進(jìn)制字符串,TEXT是非二進(jìn)制字符串,兩者均可存放大容量的信息,BLOB主要存儲(chǔ)圖片、音頻信息,而TEXT只能存儲(chǔ)純文本文件。分清楚兩者的用途

7、BINARY和VARBINARY

   這兩個(gè)的區(qū)別和CHAR與VARCHAR的區(qū)別差不多,BINARY是固定長(zhǎng)度、VARBINARY是可變程度,這兩個(gè)的作用就是為了區(qū)分大小寫(xiě)的,注意這兩個(gè)是字節(jié)字符串。


注:相關(guān)教程知識(shí)閱讀請(qǐng)移步到MYSQL教程頻道。
發(fā)表評(píng)論 共有條評(píng)論
用戶(hù)名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
国产精品12区| 黄色免费在线看| 欧美va亚洲va日韩∨a综合色| eeuss影院www影院入口| 日韩黄色片在线观看| 亚洲丝袜美腿综合| 国产一区二区福利| 国产精品日韩久久久| 欧美日韩在线一区二区| 亚洲精品一区av在线播放| 日本天堂网在线观看| 久久精品成人一区二区三区| 国产a亚洲精品| 精品国产视频一区二区三区| 99热自拍偷拍| 国产精品亲子伦av一区二区三区| 中文字幕一区二区三区四区在线视频| 女人天堂网站| 在线观看免费视频a| 成人av免费观看| 国产爆乳无码一区二区麻豆| 欧美在线观看日本一区| 成人免费网站www网站高清| 精品国产一区a| 疯狂蹂躏欧美一区二区精品| 137大胆人体在线观看| 欧美大肥婆大肥bbbbb| 欧美在线视频日韩| 狠狠做深爱婷婷综合一区| 亚洲欧美在线综合| 大地资源第二页在线观看高清版| 亚洲乱码精品一二三四区日韩在线| 亚洲欧洲99久久| www色啪啪| 高清国产一区二区三区| 国产成人高潮免费观看精品| 亚洲主播在线观看| 91精品在线影院| 98国产高清一区| 欧美自拍资源在线| 国产另类ts人妖一区二区| 91福利视频在线观看| 免费观看久久久4p| 欧美有码在线观看视频| 成人午夜精品无码区| 欧美黑人又粗又大又爽免费| 影音先锋男人资源站在线观看| 日韩小视频网站| 国产高清精品软件丝瓜软件| 亚洲免费激情| 亚洲一区二区三区四区五区午夜| 国产免费福利网站| 九九九在线观看视频| 91久久国语露脸精品国产高跟| 亚洲制服丝袜在线播放| 色综合久久综合网| 天天成人综合网| 日韩在线视频一区二区三区| 99精品国产在热久久下载| 亚洲午夜福利在线观看| 欧美一区综合| 日韩a级在线观看| 在线免费观看h视频| 国产欧美一区二区在线播放| 亚洲乱码av中文一区二区| 99在线观看视频| 国产乱淫a∨片免费视频| 激情偷拍久久| 青娱乐国产精品| 精品人妻二区中文字幕| 免费在线观看的av网站| 精品magnet| 国产911在线观看| 91国语精品自产拍在线观看性色| 自拍偷拍亚洲欧美日韩| 精品国内自产拍在线观看视频| 韩日一区二区三区| 亚洲免费影视第一页| 亚洲乱码国产乱码精品精软件| 在线观看三级视频欧美| 蜜臀一区二区三区精品免费视频| 天天躁日日躁aaaxxⅹ| 亚洲精品久久久久中文字幕欢迎你| h视频免费网站| 久久久久国产精品午夜一区| 三级影片在线观看欧美日韩一区二区| 91精品国产成人www| 五月天天在线| 蜜桃视频在线观看成人| 日本xxxxxxx免费视频| 亚洲欧美一区二区三区孕妇| 爱情岛论坛vip永久入口| 亚洲成色最大综合在线| 福利一区二区三区视频在线观看| 国产精品中文字幕制服诱惑| 日本1区2区3区中文字幕| 黄色美女网站在线观看| 日韩大片欧美大片| 成人蜜臀av电影| 视频一区二区三| 色婷婷久久99综合精品jk白丝| 日韩三级在线播放| 免费性色视频| 69**夜色精品国产69乱| 日韩毛片视频在线看| shkd中文字幕久久在线观看| 台湾佬中文在线| 成人在线免费观看av| 99在线热播精品免费99热| 亚洲日本国产| 免费黄色网址在线| 日韩精品一区二区三区中文| 四虎国产精品成人永久免费影视| 蜜桃视频第一区免费观看| 九九九热精品免费视频观看网站| 国产欧美日韩中文字幕在线| 久久99久国产精品黄毛片色诱| 97精品在线观看| www免费在线观看视频| 97av视频在线| 国产chinesehd精品露脸| 日本不卡一区视频| 亚洲精品久久久久久下一站| 精品欧美日韩精品| 午夜精品久久久久久久99老熟妇| 日韩在线观看视频网站| 忘忧草在线www成人影院| 在线观看日韩精品| 国产在线天堂www网在线观看| 亚洲精品水蜜桃| 亚洲精品国产免费| 在线能看的av| 九九热免费精品视频| 91美女精品网站| 在线播放黄色av| 久久久精品国产sm调教| 亚洲欧洲日本mm| 国产精品成人69xxx免费视频| 日韩免费观看高清完整版| 国产美女福利视频| 精品国产免费一区二区三区| 国产精品久久..4399| 91超碰在线播放| 国产特级淫片高清视频| 亚洲第一男人天堂| 伊人色综合一区二区三区影院视频| 一个人看的www视频免费观看| 美女被搞网站| 欧美96一区二区免费视频| 淫片在线观看| 国语对白做受xxxxx在线中国| 精品视频亚洲| 波多野结衣 久久| 日韩激情在线| 国产精品国模大尺度私拍| 精品国产乱码一区二区三区| 亚洲一区二区三区四区五区xx| 久久亚洲二区| 欧美最猛性xxxx高清| www.亚洲色图.com| 国语对白中文字幕| 欧美挠脚心视频网站| 欧美成人免费全部观看天天性色| 国产天堂亚洲国产碰碰| 亚洲天堂网站| av动漫一区二区| 欧美人体做爰大胆视频| 97超碰国产一区二区三区| 男人添女人下部高潮视频在线观看| 亚洲国产天堂久久综合网| 大桥未久av一区二区三区中文| 91精品国产91久久| 992tv国产精品成人影院| 免费的av电影| av一级在线观看| 成人网址大全| 91成人福利社区| 成人高清在线视频| 欧美性久久久久| 欧美黑人巨大| 欧美日韩三级一区二区| 国产一区二区91| 精品无人区乱码1区2区3区在线| 欧美精品卡一卡二| 97色在线观看| 全彩无遮挡全彩口工漫画h#| 福利在线视频网站| 91精品国产福利在线观看| 国产午夜精品视频一区二区三区| 六月丁香婷婷色狠狠久久| 亚洲最新视频在线观看| 国产精选第一页| 免费观看又污又黄在线观看国产| 亚洲午夜久久久影院| 亚洲午夜高清视频| 成a人片在线观看| 理论视频在线| 色综合久久九月婷婷色综合| 老司机午夜性大片| 色噜噜狠狠成人中文综合| 亚洲区中文字幕| 亚洲成人av影片| 桥本有菜亚洲精品av在线| 色综合久久天天| 玖玖玖电影综合影院| 国内精品伊人久久久久影院对白| 欧美成人精品1314www| 五月天色网站| 亚洲欧美日本韩国| 成人看片爽爽爽| 麻豆蜜桃在线| 日本视频在线| 97视频在线观看网址| 亚洲欧洲视频在线| 婷婷综合在线观看| 久久精品人人做| 特一级黄色片| 精品视频全国免费看| 成人p站proumb入口| 亚洲天天影视网| 香蕉视频一区| 性猛交富婆╳xxx乱大交天津| 九七电影院97理论片久久tvb| 久久国产天堂福利天堂| 亚洲第一大网站| 国产免费一区二区三区网站免费| 欧美精品在线播放| 亚洲黄色在线看| 97se亚洲国产综合自在线不卡| 亚洲啪啪91| 日日躁天天躁狠狠躁| sedog在线观看| 国产吧在线视频| 国产一区二区三区在线观看免费| 51午夜精品视频| 国产成人精品1024| 黄页视频在线观看| 欧美亚洲高清| 污污免费网站| 美女禁区视频免费观看精选| 亚洲人成网77777色在线播放| 国产精品高潮粉嫩av| 久久av资源网| 露出调教综合另类| 欧美xxxx做受欧美88bbw| 日本网址在线观看| 亚洲成人1区2区| 国产成人午夜电影网| 美女做爰内谢全过程视频| 日韩1区在线| 免费视频爱爱太爽了| av资源中文色综合| 欧美又粗又硬又大久久久| 亚洲第一在线综合网站| 伊人色综合网| 黑人精品一区| 欧美另类高清videos的特点| 免费一级片91| 亚洲免费电影在线观看| 亚洲精选av在线| 国产综合视频一区二区三区免费| 色综合久久中文综合久久牛| 亚洲综合伊人久久大杳蕉| 91在线品视觉盛宴免费| 明星乱亚洲合成图.com| 日韩美女一区二区三区四区| 国产精品高颜值在线观看| 亚洲精品在线不卡| 91禁在线观看| www.日本在线观看| 亚洲一区二区三区四区视频| 亚洲综合网站在线观看| 国产.精品.日韩.另类.中文.在线.播放| 日韩精品亚洲专区| 欧美精品三级在线| aaa在线视频| 娇妻被老王脔到高潮失禁视频| 999久久欧美人妻一区二区| 少妇高潮久久久久久潘金莲| 色婷婷狠狠五月综合天色拍| 久草精品视频在线观看| 中文字幕在线观看网址| 成人动漫中文字幕| 麻豆精品久久精品色综合| 成人黄色大片在线观看| 久久久久久久久国产精品| 国产在线精品一区在线观看麻豆| 精品久久久一区| ts人妖另类在线| 国内精品在线视频| 久久久久xxxx| 粉嫩久久99精品久久久久久夜| 久久婷婷蜜乳一本欲蜜臀| 亚洲性视频在线| 亚洲精品日韩一| 91精品久久久久久| 日本手机在线视频| 在线观看91视频| 日本欧美黄色| 秋霞毛片久久久久久久久| 久久青青草综合| av免费网站在线观看| yjizz视频网站在线播放| 成人国产精品| 久中文字幕一区| 美女网站免费观看视频| 一区二区三区四区视频免费观看| 一卡二卡三卡日韩欧美| 国产原创精品| 国产a级一级片| 秋霞网一区二区三区| 妖精视频在线观看免费| 亚洲熟妇无码另类久久久| 国产又粗又大又爽的视频| 欧美7777| 99久久久无码国产精品性波多| 一区二区小说| 91免费在线视频网站| 久久高清免费视频| 精品一区二区成人免费视频| 国产成人一区二区三区小说| 91高清国产视频| 亚洲视频手机在线观看| 777国产偷窥盗摄精品视频| 欧美在线色图| 免费在线看电影| 九九久久电影| 蜜桃传媒视频麻豆第一区免费观看|