免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
MySql數(shù)據(jù)庫的列類型(字段類型_就這樣每一天~尋找刺激 -
MySql數(shù)據(jù)庫的列類型(字段類型
2007年04月02日 星期一 上午 01:17
MySQL數(shù)據(jù)庫的表是一個二維表,由一個或多個數(shù)據(jù)列構(gòu)成。
每個數(shù)據(jù)列都有它的特定類型,該類型決定了MySQL如何看待該列數(shù)據(jù),我們可以把整型數(shù)值存放到字符類型的列中,MySQL則會把它看成
字符串來處理。
MySQL中的列類型有三種:數(shù)值類、字符串類和日期/時間類。
從大類來看列類型和數(shù)值類型一樣,都是只有三種。但每種列類型都還可細分。
下面對各種列類型進行詳細介紹。

數(shù)值類的數(shù)據(jù)列類型
數(shù)值型的列類型包括整型和浮點型兩大類。

TINYINT:1字節(jié) 非常小的正整數(shù),帶符號:-128~127,不帶符號:0~255
SMALLINT:2字節(jié) 小整數(shù),帶符號:-32768~32767,不帶符號:0~65535
MEDIUMINT:3字節(jié) 中等大小的整數(shù),帶符號:-8388608~8388607,不帶符號:0~16777215
INT:4字節(jié) 標準整數(shù),帶符號:-2147483648~2147483647,不帶符號:0~4294967295
BIGINT:8字節(jié) 大整數(shù),帶符號:-9223372036854775808~9233372036854775807,不帶符號:0~18446744073709551615
FLOAT:4字節(jié) 單精度浮點數(shù),最小非零值:+-1.175494351E-38,最大非零值:+-3.402823466E+38
DOUBLE:8字節(jié) 雙精度浮點數(shù),最小非零值:+-2.2250738585072014E-308,最大非零值:+-1.7976931348623157E+308
DECIMAL:M+2字節(jié) 以字符串形式表示的浮點數(shù),它的取值范圍可變,由M和D的值決定。

整型數(shù)據(jù)列類型

MySQL有五種整型數(shù)據(jù)列類型,即TINYINT,SMALLINT,MEDIUMINT,INT和BIGINT。它們之間的區(qū)別是取值范圍不同,存儲空間也各不相同。
在整型數(shù)據(jù)列后加上UNSIGNED屬性可以禁止負數(shù),取值從0開始。

聲明整型數(shù)據(jù)列時,我們可以為它指定個顯示寬度M(1~255),如INT(5),指定顯示寬度為5個字符,如果沒有給它指定顯示寬度,MySQL會為它指定一個默認值。顯示寬度只用于顯示,并不能限制取值范圍和占用空間,如:INT(3)會占用4個字節(jié)的存儲空間,并且允許的最大值也不會是999,而是INT整型所允許的最大值。

浮點型數(shù)據(jù)列類型

MySQL有三種浮點型數(shù)據(jù)列類型,分別是:FLOAT,DOUBLE和DECIMAL。
浮點類數(shù)據(jù)類型有一個最大可表示值和一個最小非零可表示值,最小非零可表示值決定了該類型的精確度。

MySQL 4.0.2版之后,F(xiàn)LOAT和DOUBLE都可以指定UNSIGNED屬性。當指定該屬性時,取值范圍不平移到正數(shù)區(qū)間,而只是簡單地把浮點類型的負數(shù)部份去掉。

浮點類型也有M(1~255)和D(1~30,且不能大于M-2)。分別表示顯示寬度和小數(shù)位數(shù)。M和D在FLOAT和DOUBLE中是可選的,默認,當MySQL版本大于3.23.6時,F(xiàn)LOAT和DOUBLE類型將被保存為硬件所支持的最大精度。DECIMAL的M和D值在MySQL3.23.6后可選,默認D值為0,M值為10。

如何選擇數(shù)值類數(shù)據(jù)列類型?

為了節(jié)省存儲空間和提高數(shù)據(jù)庫處理效率,我們應根據(jù)應用數(shù)據(jù)的取值范圍來選擇一個最適合的數(shù)據(jù)列類型。如果把一個超出數(shù)據(jù)列取值范圍的數(shù)存入該列,則MySQL就會截短該值,如:我們把99999存入SMALLINT(3)數(shù)據(jù)列里,因為SMALLINT(3)的取值范圍是-32768~32767,所以就會被截短成32767存儲。顯示寬度3不會影響數(shù)值的存儲。只影響顯示。

對于浮點數(shù)據(jù)列,存入的數(shù)值會被該列定義的小數(shù)位進行四舍五入。如把一個1.234存入FLOAT(6.1)數(shù)據(jù)列中,結(jié)果是1.2。

DECIMAL與FLOAT和DOUBLE的區(qū)別是:DECIMAL類型的值是以字符串的形式被儲存起來的,它的小數(shù)位數(shù)是固定的。它的優(yōu)點是,不會象FLOAT和DOUBLE類型數(shù)據(jù)列那樣進行四舍五入而產(chǎn)生誤差,所以很適合用于財務計算;而它的缺點是:由于它的存儲格式不同,CPU不能對它進行直接運算,從而影響運算效率。DECIMAL(M,D)總共要占用M+2個字節(jié)。

數(shù)值類數(shù)據(jù)列的屬性

ZEROFILL屬性適用于所有數(shù)值類數(shù)據(jù)列類型,作用是,如果數(shù)值的寬度小于定義的顯示寬度,則在數(shù)值前填充0。
UNSIGNED屬性不允許數(shù)據(jù)列出現(xiàn)負數(shù)。
AUTO_INCREMENT屬性可生成獨一無二的數(shù)字序列。只對整數(shù)類的數(shù)據(jù)列有效。
NULLNOT NULL屬性設置數(shù)據(jù)列是否可為空。
DEFAULT屬性可為數(shù)據(jù)列指定默認值。

//////////////////////////////////////////////////////

字符串類數(shù)據(jù)列類型

字符串可以用來表示任何一種值,所以它是最基本的類型之一。
我們可以用字符串類型來存儲圖象或聲音之類的二進制數(shù)據(jù),也可存儲用gzip壓縮的數(shù)據(jù)。
下表介紹了各種字符串類型:

CHAR[(M)] M字節(jié) M字節(jié)
VARCHAR[(M)] M字節(jié) L+1字節(jié)
TINYBLOD,TINYTEXT 2^8-1字節(jié) L+1字節(jié)
BLOB,TEXT 2^16-1字節(jié) L+2
MEDIUMBLOB,MEDIUMTEXT 2^24-1字節(jié) L+3
LONGBLOB,LONGTEXT 2^32-1字節(jié) L+4
ENUM('value1','value2',...) 65535個成員 1或2字節(jié)
SET('value1','value2',...) 64個成員 1,2,3,4或8字節(jié)

L+1、L+2是表示數(shù)據(jù)列是可變長度的,它占用的空間會根據(jù)數(shù)據(jù)行的增減面則改變。數(shù)據(jù)行的總長度取決于存放在這些數(shù)據(jù)列里的數(shù)據(jù)值的長度。L+1或L+2里多出來的字節(jié)是用來保存數(shù)據(jù)值的長度的。在對長度可變的數(shù)據(jù)進行處理時,MySQL要把數(shù)據(jù)內(nèi)容和數(shù)據(jù)長度都保存起來。

如果把超出字符串最大長度的數(shù)據(jù)放到字符類數(shù)據(jù)列中,MySQL會自動進行截短處理。

ENUM和SET類型的數(shù)據(jù)列定義里有一個列表,列表里的元素就是該數(shù)據(jù)列的合法取值。如果試圖把一個沒有在列表里的值放到數(shù)據(jù)列里,它會被轉(zhuǎn)換為空字符串(“”)。

字符串類型的值被保存為一組連續(xù)的字節(jié)序列,并會根據(jù)它們?nèi)菁{的是二進制字符串還是非二進制字符而被區(qū)別對待為字節(jié)或者字符:

二進制字符串被視為一個連續(xù)的字節(jié)序列,與字符集無關。MySQL把BLOB數(shù)據(jù)列和帶BINARY屬性的CHAR和VARCHAR數(shù)據(jù)列里的數(shù)據(jù)當作二進制值。

非二進制字符串被視為一個連續(xù)排列的字符序列。與字符集有關。MySQL把TEXT列與不帶BINARY屬性的CHAR和VARCHAR數(shù)據(jù)列里的數(shù)據(jù)當作二進制值對待。

在MySQL4.1以后的版本中,不同的數(shù)據(jù)列可以使用不同的字符集。在MySQL4.1版本以前,MySQL用服務器的字符集作為默認字符集。

非二進制字符串,即我們通常所說的字符串,是按字符在字符集中先后次序進行比較和排序的。而二進制字符串因為與字符集無關,所以不以字符順序排序,而是以字節(jié)的二進制值作為比較和排序的依據(jù)。下面介紹兩種字符串的比較方式:

二進制字符串的比較方式是一個字節(jié)一個字節(jié)進行的,比較的依據(jù)是兩個字節(jié)的二進制值。也就是說它是區(qū)分大小寫的,因為同一個字母的大小寫的數(shù)值編碼是不一樣的。

非二進制字符串的比較方式是一個字符一個字符進行的,比較的依據(jù)是兩個字符在字符集中的先后順序。在大多數(shù)字符集中,同一個字母的大小寫往往有著相同的先后順序,所以它不區(qū)分大小寫。

二進制字符串與字符集無關,所以無論按字符計算還是按字節(jié)計算,二進制字符串的長度都是一樣的。所以VARCHAR(20)并不表示它最多能容納20個字符,而是表示它最多只能容納可以用20個字節(jié)表示出來的字符。對于單字節(jié)字符集,每個字符只占用一個字節(jié),所以這兩者的長度是一樣的,但對于多字節(jié)字符集,它能容納的字符個數(shù)肯定少于20個。

CHAR和VARCHAR

CHAR和VARCHAR是最常用的兩種字符串類型,它們之間的區(qū)別是:

CHAR是固定長度的,每個值占用相同的字節(jié),不夠的位數(shù)MySQL會在它的右邊用空格字符補足。

VARCHAR是一種可變長度的類型,每個值占用其剛好的字節(jié)數(shù)再加上一個用來記錄其長度的字節(jié)即L+1字節(jié)。

CHAR(0)和VARCHAR(0)都是合法的。VARCHAR(0)是從MySQL4.0.2版開始的。它們的作用是作為占位符或用來表示各種on/off開關值。

如何選擇CHAR和VARCHAR,這里給出兩個原則:

如果數(shù)據(jù)都有相同的長度,選用VARCHAR會多占用空間,因為有一位用來存儲其長度。如果數(shù)據(jù)長短不一,選用VARCHAR能節(jié)省存儲空間。而CHAR不論字符長短都需占用相同的空間,即使是空值也不例外。

如果長度出入不大,而且是使用MyISAM或ISAM類型的表,則用CHAR會比VARCHAR好,因為MyISAM和ISAM類型的表對處理固定長度的行的效率高。

  
在一個數(shù)據(jù)表里,只要有一個數(shù)據(jù)列的長度是可變的,則所有數(shù)據(jù)列的長度將是可變的。MySQL會進行自動地轉(zhuǎn)換。一個例外,CHAR長度小于4的不會進行自動轉(zhuǎn)換,因為MySQL會認為這樣做沒必要,節(jié)省不了多少空間。反而MySQL會把大量長度小的VARCHAR轉(zhuǎn)換成CHAR,以減少空間占用量。

BLOB和TEXT

BLOB是二進制字符串,TEXT是非二進制字符串。兩者都可存放大容量的信息。

有關BLOB和TEXT索引的建立:

BDB表類型和MySQL3.23.2以上版本的MyISAM表類型允許在BLOB和TEXT數(shù)據(jù)列上建立索引。

ISAM、HEAP和InnoDB表不支持大
對象列的索引。

使用BLOB和TEXT應注意的問題:

由于這兩個列類型所存儲的數(shù)據(jù)量大,所以刪除和修改操作容易在數(shù)據(jù)表里產(chǎn)生大量的碎片,需定期運行OPTIMIZE TABLE以減少碎片和提高性能。

如果使用的值非常巨大,就需對服務器進行相應的優(yōu)化調(diào)整,增加max_allowed_packet參數(shù)的值。對那些可會用到變些巨大數(shù)據(jù)的客戶程序,也需加大它們的數(shù)據(jù)包大小。

ENUM和SET

ENUM和SET都是比較特殊的字符串數(shù)據(jù)列類型,它們的取值范圍是一個預先定義好的列表。ENUM或SET數(shù)據(jù)列的取值只能從這個列表中進行選擇。ENUM和SET的主要區(qū)別是:

ENUM只能取單值,它的數(shù)據(jù)列表是一個枚舉集合。它的合法取值列表最多允許有65535個成員。例如:ENUM("N","Y")表示,該數(shù)據(jù)列的取值要么是"Y",要么就是"N"。

SET可取多值。它的合法取值列表最多允許有64個成員??兆址彩且粋€合法的SET值。

ENUM和SET的值是以字符串形式出現(xiàn)的,但在內(nèi)部,MySQL以數(shù)值的形式存儲它們。

ENUM的合法取值列表中的字符串被按聲明定義的順序被編號,從1開始。

SET的編號不是按順序進行編號的,SET中每一個合法取值都對應著SET值里的一個位。第一個合法取值對應0位,第二個合法取值對應1位,以此類推,如果數(shù)值形式的SET值等于0,則說明它是一個空字符串,如果某個合法的取值出現(xiàn)在SET數(shù)據(jù)列里,與之對應的位就會被置位;如果某個合法的取值沒有出現(xiàn)在SET數(shù)據(jù)列里,與之對應的位就會被清零。正因為SET值與位有這樣的對應關系,所以SET數(shù)據(jù)列的多個合法取值才能同時出現(xiàn)并構(gòu)成SET值。

字符串類型數(shù)據(jù)列的字符集屬性

在MySQL 4.1以前的版本,字符串數(shù)據(jù)列的字符集由服務器的字符決定,MySQL 4.1版以后的版本可對每個字符串數(shù)據(jù)列指定不同的字符串。如果按默認方式設置,可按數(shù)據(jù)列、數(shù)據(jù)表、數(shù)據(jù)庫、服務器的順序關聯(lián)字符串的字符集,直到找一個明確定義的字符集。

/////////////////////////////////////////////////////////

日期,時間型數(shù)據(jù)列類型

DATE 1000-01-01~9999-12-31 3字節(jié)(MySQL3.23版以前是4字節(jié) ) 0000-00-00
TIME -838:59:59~838:59:59 3字節(jié) 00:00:00
DATETIME 1000-01-01 00:00:00~9999-12-31 23:59:59 8字節(jié) 0000-00-00 00:00:00
TIMESTAMP 19700101000000~2037年的某個時刻 4字節(jié) 00000000000000
YEAR YEAR(4):1901~2155 YEAR(2):1970~2069 1字節(jié) 0000

MySQL總是把日期和日期里的年份放在最前面,按年月日的順序顯示。

DATE、TIME、DATATIME數(shù)據(jù)列類型

DATE、TIME和DATATIME類型分別存放日期值、時間值、日期和時間值的組合。它們的格式分別是“CCYY-MM-DD”、“hh:mm:ss”、“CCYY-MM-DD hh:mm:ss”。

DATATIME里的時間值和TIME值是有區(qū)別的,DATATIME里的時間值代表的是幾點幾分,TIME值代表的是所花費的時間。當向TIME數(shù)據(jù)列插值時,需用時間的完整寫法,如12分30秒要寫成“00:12:30”。

TIMESTAMP數(shù)據(jù)列類型

TIMESTAMP數(shù)據(jù)列的格式是CCYYMMDDhhmmss,取值范圍從19700101000000開始,即1970年1月1號,最大到2037年。它的特點是能把數(shù)據(jù)行的創(chuàng)建或修改時間記錄下來:

如果把一個NULL值插入TIMESTAMP列,這個數(shù)據(jù)列就將自動取值為當前的日期和時間。

在創(chuàng)建和修改數(shù)據(jù)行時,如果沒有明確對TIMESTAMP數(shù)據(jù)列進行賦值,則它就會自動取值為當前的日期和時間。如果行中有多個TIMESTAMP列,只有第一個會自動取值。

如果對TIMESTAMP設置一個確定的日期和時間值,則會使TIMESTAMP的自動取值功能失效。

TIMESTAMP默認的列寬是14,可指定列寬,以改變顯示效果。但不論你指定的列寬如何,MySQL都是以4字節(jié)來存儲TIMESTAMP值,也總是以14位精度來計算。

如果需要把創(chuàng)建時間和最近一次修改時間同時記錄下來,可以用兩個時間戳來記錄,一個記錄創(chuàng)建時間,一個記錄修改時間。不過需記住兩件事,一是要把記錄修改時間的TIMESTAMP數(shù)據(jù)列放在最前面,這樣才會自動取值;二是創(chuàng)建一條新記錄時,要用now()函數(shù)來初始化創(chuàng)建時間TIMESTAMP數(shù)據(jù)列,這樣,該TIMESTAMP數(shù)據(jù)列就不會再變化。

YEAR

YEAR是一種單字節(jié)的數(shù)據(jù)列類型,YEAR(4)的取值范圍是1901~2155,YEAR(2)的取值范圍是1970~2069,但只顯示最后兩位數(shù)。MySQL能自動把兩位數(shù)字年份轉(zhuǎn)換成四位數(shù)字的年份,如97和14分被轉(zhuǎn)換成1997和2014。轉(zhuǎn)換規(guī)則是這樣的:

年份值00~69將被轉(zhuǎn)換成2000~2069;

年份值70~99將被轉(zhuǎn)換成1970~1999。

00被轉(zhuǎn)換成0000,而不是2000。因為數(shù)值00也就是0,而0值是YEAR的一個合法取值。
本站僅提供存儲服務,所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊舉報。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
MySQL 數(shù)據(jù)類型 | 菜鳥教程
MySQL 數(shù)據(jù)類型
mysql數(shù)據(jù)類型
ORACLE基本數(shù)據(jù)類型總結(jié)
SQL2000的數(shù)據(jù)類型
MySQL數(shù)據(jù)庫實操教程(04)——數(shù)據(jù)類型詳解
更多類似文章 >>
生活服務
分享 收藏 導長圖 關注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服