一、MySQL數(shù)據(jù)庫(kù)char類(lèi)型的長(zhǎng)度是什么意思
MySQL數(shù)據(jù)庫(kù)char類(lèi)型的長(zhǎng)度是指該字段所占用的字節(jié)數(shù)。char數(shù)據(jù)類(lèi)型是MySQL中固定長(zhǎng)度的字符類(lèi)型。 我們經(jīng)常聲明char類(lèi)型,其長(zhǎng)度指定要存儲(chǔ)的最大字符數(shù)。 例如,char(20)非常多可以容納20個(gè)字符。如果要存儲(chǔ)的數(shù)據(jù)是固定大小,則應(yīng)使用char數(shù)據(jù)類(lèi)型。在這種情況下,與varchar相比,您將獲得更好的性能。char數(shù)據(jù)類(lèi)型的長(zhǎng)度可以是從0到255的任何值。當(dāng)存儲(chǔ)char值時(shí),MySQL將其值與空格填充到聲明的長(zhǎng)度。
二、MySQL數(shù)據(jù)庫(kù)的數(shù)據(jù)類(lèi)型
MySQL數(shù)據(jù)庫(kù)的數(shù)據(jù)類(lèi)型主要是分為數(shù)值型,日期時(shí)間型以及字符串型這三個(gè)大類(lèi)。
1、數(shù)值型
MySQL 的數(shù)值數(shù)據(jù)類(lèi)型可以大致劃分為兩個(gè)類(lèi)別,一個(gè)是整數(shù),另一個(gè)是浮點(diǎn)數(shù)或小數(shù)。許多不同的子類(lèi)型對(duì)這些類(lèi)別中的每一個(gè)都是可用的,每個(gè)子類(lèi)型支持不同大小的數(shù)據(jù),并且 MySQL 允許我們指定數(shù)值字段中的值是否有正負(fù)之分或者用零填補(bǔ)。
MySQL支持所有標(biāo)準(zhǔn)SQL數(shù)值數(shù)據(jù)類(lèi)型。這些類(lèi)型包括嚴(yán)格數(shù)值數(shù)據(jù)類(lèi)型(INTEGER、SMALLINT、DECIMAL和NUMERIC),以及近似數(shù)值數(shù)據(jù)類(lèi)型(FLOAT、REAL和DOUBLE PRECISION)。關(guān)鍵字INT是INTEGER的同義詞,關(guān)鍵字DEC是DECIMAL的同義詞。BIT數(shù)據(jù)類(lèi)型保存位字段值,并且支持MyISAM、MEMORY、InnoDB和BDB表。作為SQL標(biāo)準(zhǔn)的擴(kuò)展,MySQL也支持整數(shù)類(lèi)型TINYINT、MEDIUMINT和BIGINT。
MySQL中常見(jiàn)的數(shù)字?jǐn)?shù)據(jù)類(lèi)型:
INT?– 正常大小的整數(shù),可以帶符號(hào)。如果是有符號(hào)的,它允許的范圍是從-2147483648到2147483647。如果是無(wú)符號(hào),允許的范圍是從0到4294967295。 可以指定多達(dá)11位的寬度。TINYINT?– 一個(gè)非常小的整數(shù),可以帶符號(hào)。如果是有符號(hào),它允許的范圍是從-128到127。如果是無(wú)符號(hào),允許的范圍是從0到255,可以指定多達(dá)4位數(shù)的寬度。SMALLINT?– 一個(gè)小的整數(shù),可以帶符號(hào)。如果有符號(hào),允許范圍為-32768至32767。如果無(wú)符號(hào),允許的范圍是從0到65535,可以指定非常多5位的寬度。MEDIUMINT?– 一個(gè)中等大小的整數(shù),可以帶符號(hào)。如果有符號(hào),允許范圍為-8388608至8388607。 如果無(wú)符號(hào),允許的范圍是從0到16777215,可以指定非常多9位的寬度。BIGINT?– 一個(gè)大的整數(shù),可以帶符號(hào)。如果有符號(hào),允許范圍為-9223372036854775808到9223372036854775807。如果無(wú)符號(hào),允許的范圍是從0到18446744073709551615. 可以指定非常多20位的寬度。FLOAT(M,D)?– 不能使用無(wú)符號(hào)的浮點(diǎn)數(shù)字??梢远x顯示長(zhǎng)度(M)和小數(shù)位數(shù)(D)。這不是必需的,并且默認(rèn)為10,2。其中2是小數(shù)的位數(shù),10是數(shù)字(包括小數(shù))的總數(shù)。小數(shù)精度可以到24個(gè)浮點(diǎn)。DOUBLE(M,D)?– 不能使用無(wú)符號(hào)的雙精度浮點(diǎn)數(shù)。可以定義顯示長(zhǎng)度(M)和小數(shù)位數(shù)(D)。 這不是必需的,默認(rèn)為16,4,其中4是小數(shù)的位數(shù)。小數(shù)精度可以達(dá)到53位的DOUBLE。 REAL是DOUBLE同義詞。DECIMAL(M,D)?– 非壓縮浮點(diǎn)數(shù)不能是無(wú)符號(hào)的。在解包小數(shù),每個(gè)小數(shù)對(duì)應(yīng)于一個(gè)字節(jié)。定義顯示長(zhǎng)度(M)和小數(shù)(D)的數(shù)量是必需的。 NUMERIC是DECIMAL的同義詞。3、日期時(shí)間型
表示時(shí)間值的日期和時(shí)間類(lèi)型為DATETIME、DATE、TIMESTAMP、TIME和YEAR。每個(gè)時(shí)間類(lèi)型有一個(gè)有效值范圍和一個(gè)”零”值,當(dāng)指定不合法的MySQL不能表示的值時(shí)使用”零”值。
MySQL的日期和時(shí)間數(shù)據(jù)類(lèi)型包括:
DATE?– 以YYYY-MM-DD格式的日期,在1000-01-01和9999-12-31之間。 例如,1973年12月30日將被存儲(chǔ)為1973-12-30。DATETIME?– 日期和時(shí)間組合以YYYY-MM-DD HH:MM:SS格式,在1000-01-01 00:00:00 到9999-12-31 23:59:59之間。例如,1973年12月30日下午3:30,會(huì)被存儲(chǔ)為1973-12-30 15:30:00。TIMESTAMP?– 1970年1月1日午夜之間的時(shí)間戳,到2037的某個(gè)時(shí)候。這看起來(lái)像前面的DATETIME格式,無(wú)需只是數(shù)字之間的連字符; 1973年12月30日下午3點(diǎn)30分將被存儲(chǔ)為19731230153000(YYYYMMDDHHMMSS)。TIME?– 存儲(chǔ)時(shí)間在HH:MM:SS格式。YEAR(M)?– 以2位或4位數(shù)字格式來(lái)存儲(chǔ)年份。如果長(zhǎng)度指定為2(例如YEAR(2)),年份就可以為1970至2069(70?69)。如果長(zhǎng)度指定為4,年份范圍是1901-2155,默認(rèn)長(zhǎng)度為4。3、字符串型
雖然數(shù)字和日期類(lèi)型比較有意思,但存儲(chǔ)大多數(shù)數(shù)據(jù)都可能是字符串格式。字符串類(lèi)型指CHAR、VARCHAR、BINARY、VARBINARY、BLOB、TEXT、ENUM和SET。
MySQL中常見(jiàn)的字符串?dāng)?shù)據(jù)類(lèi)型:
CHAR(M)?– 固定長(zhǎng)度的字符串是以長(zhǎng)度為1到255之間個(gè)字符長(zhǎng)度(例如:CHAR(5)),存儲(chǔ)右空格填充到指定的長(zhǎng)度。 限定長(zhǎng)度不是必需的,它會(huì)默認(rèn)為1。VARCHAR(M)?– 可變長(zhǎng)度的字符串是以長(zhǎng)度為1到255之間字符數(shù)(高版本的MySQL超過(guò)255); 例如: VARCHAR(25). 創(chuàng)建VARCHAR類(lèi)型字段時(shí),必須定義長(zhǎng)度。BLOB 或 TEXT?– 字段的最大長(zhǎng)度是65535個(gè)字符。 BLOB是“二進(jìn)制大對(duì)象”,并用來(lái)存儲(chǔ)大的二進(jìn)制數(shù)據(jù),如圖像或其他類(lèi)型的文件。定義為T(mén)EXT文本字段還持有大量的數(shù)據(jù); 兩者之間的區(qū)別是,排序和比較上存儲(chǔ)的數(shù)據(jù),BLOB大小寫(xiě)敏感,而TEXT字段不區(qū)分大小寫(xiě)。不用指定BLOB或TEXT的長(zhǎng)度。TINYBLOB 或 TINYTEXT?– BLOB或TEXT列用255個(gè)字符的最大長(zhǎng)度。不指定TINYBLOB或TINYTEXT的長(zhǎng)度。MEDIUMBLOB 或 MEDIUMTEXT?– BLOB或TEXT列具有16777215字符的最大長(zhǎng)度。不指定MEDIUMBLOB或MEDIUMTEXT的長(zhǎng)度。LONGBLOB 或 LONGTEXT?– BLOB或TEXT列具有4294967295字符的最大長(zhǎng)度。不指定LONGBLOB或LONGTEXT的長(zhǎng)度。ENUM?– 枚舉,這是一個(gè)奇特的術(shù)語(yǔ)列表。當(dāng)定義一個(gè)ENUM,要?jiǎng)?chuàng)建它的值的列表,這些是必須用于選擇的項(xiàng)(也可以是NULL)。例如,如果想要字段包含“A”或“B”或“C”,那么可以定義為ENUM為 ENUM(“A”,“B”,“C”)也只有這些值(或NULL)才能用來(lái)填充這個(gè)字段。4、數(shù)據(jù)類(lèi)型的選擇
整型:根據(jù)要顯示的最大值決定;浮點(diǎn)型:要顯示小數(shù)。如果要精確到小數(shù)點(diǎn)后10位,就選擇DOUBLE,而不應(yīng)該選擇FLOAT。DECIMAL精度較高,浮點(diǎn)數(shù)會(huì)出現(xiàn)誤差,如果精度較高,則應(yīng)選擇定點(diǎn)數(shù)DECIMAL;字符串型:定長(zhǎng)與變長(zhǎng)的區(qū)別,CHAR類(lèi)型占用空間比較大,但是處理速度比VARCHAR快,如果長(zhǎng)度變化不大,如身份證號(hào)碼那種,較好選擇CHAR類(lèi)型。而對(duì)于評(píng)論字符串,較好選擇VARCHAR;時(shí)間:根據(jù)需要顯示的類(lèi)型咯,特別是TIMESTAMP,如果需要顯示的時(shí)間與時(shí)區(qū)對(duì)應(yīng),就應(yīng)該選擇TIMESTAMP;ENUM類(lèi)型和SET類(lèi)型:長(zhǎng)度不同,ENUM類(lèi)型非常多可以由65535個(gè)成員,而SET類(lèi)型非常多只能包含64個(gè)成員。且ENUM只能單選,而SET類(lèi)型可以多選;TEXT類(lèi)型和BLOB類(lèi)型:TEXT只能存儲(chǔ)字符數(shù)據(jù),而B(niǎo)LOB可以存儲(chǔ)二進(jìn)制數(shù)據(jù)。如果是純文本,適合TEXT。如果是圖片等適合存二進(jìn)制。延伸閱讀1:設(shè)計(jì)數(shù)據(jù)類(lèi)型的注意事項(xiàng)
使用最精確的類(lèi)型,占用最少的空間考慮相關(guān)語(yǔ)言處理方便性考慮移值的兼容性