MySQL數據表類型 數據類型

MySQL數據表類型 數據類型
表類型
  MySQL的數據表類型不少,其中比較重要的是MyISAM,InnoDB這兩種。
  這兩種類型各有優缺點,須要根據實際狀況選擇適合的,MySQL支持對不一樣的表設置不一樣的類型。下面作個對比:
  MyISAM表類型是一種比較成熟穩定的表類型,可是MyISAM對一些功能不支持。
   MyISAM  InnoDB
事務  不支持  支持
數據行鎖定  不支持,只有表鎖定  支持
外鍵約束  不支持   支持
表空間大小  相對小 相對大,最大是2倍 
全文索引 支持  不支持 
GIS數據  支持  不支持 
COUNT問題  無  執行COUNT(*)查詢時,速度慢 
 
  通常狀況下我以爲選擇MyISAM就行,若是須要事務,或者須要不少用戶同時修改某個數據表裏的數據時,能夠考慮InnoDB數據表。
 
數據類型
1.整型(xxxint)
 MySQL數據類型  含義
 tinyint(m) 1個字節表示(-128~127)
 smallint(m) 2個字節表示(-32768~32767) 
 mediumint(m) 3個字節表示(-8388608~8388607) 
 int(m) 4個字節表示(-2147483648~2147483647) 
 bigint(m) 8個字節表示(+-9.22*10的18次方) 
右側的取值範圍是在未加unsigned關鍵字的狀況下,若是加了unsigned,則最大值翻倍,如tinyint unsigned的取值範圍爲(0~256)。
書上說int(m)括弧裏的m是表示SELECT查詢結果集中的顯示寬度,並不影響實際的取值範圍,我測了一下,定義一個字段number 類型爲int(4),插入一條記錄"123456",用mysql query broswer執行SELECT查詢,返回的結果集中123456正確顯示,沒有影響到顯示的寬度,不知道這個m有什麼用。

2.浮點型(float和double)
MySQL數據類型 含義 
 float(m,d) 單精度浮點型,8位精度(4字節),m是十進制數字的總個數,
d是小數點後面的數字個數。
 double(m,d) 雙精度浮點型,16位精度(8字節)
參數m隻影響顯示效果,不影響精度,d卻不一樣,會影響到精度。
好比設一個字段定義爲float(5,3),若是插入一個數123.45678,實際數據庫裏存的是123.457,小數點後面的數別四捨五入截成457了,但總個數不受到限制(6位,超過了定義的5位)。

3.定點數(decimal)
decimal(m,d)  定點類型
浮點型在數據庫中存放的是近似值,而定點類型在數據庫中存放的是精確值。參數m是定點類型數字的最大個數(精度),範圍爲0~65,d小數點右側數字的個數,範圍爲0~30,但不得超過m。
對定點數的計算能精確到65位數字。

4.字符串(char,varchar,xxxtext)
MySQL數據類型 含義 
char(n)  固定長度的字符串,最多255個字符
varchar(n)  固定長度的字符串,最多65535個字符
tinytext  可變長度字符串,最多255個字符 
text  可變長度字符串,最多65535個字符 
mediumtext  可變長度字符串,最多2的24次方-1個字符 
longtext  可變長度字符串,最多2的32次方-1個字符 
char和varchar:
1.均可以經過指定n,來限制存儲的最大字符數長度,char(20)和varchar(20)將最多隻能存儲20個字符,超過的字符將會被截掉。n必須小於該類型容許的最大字符數。
2.char類型指定了n以後,若是存入的字符數小於n,後面將會以空格補齊,查詢的時候再將末尾的空格去掉,因此char類型存儲的字符串末尾不能有空格,varchar不受此限制。
3. 內部存儲的機制不一樣。char是固定長度,char(4)無論是存一個字符,2個字符或者4個字符(英文的),都將佔用4個字節,varchar是存入的 實際字符數+1個字節(n<=255)或2個字節(n>255),因此varchar(4),存入一個字符將佔用2個字節,2個字符佔用3個 字節,4個字符佔用5個字節。
4.char類型的字符串檢索速度要比varchar類型的快。

varchar和text:
1.都是可變長度的,最多能存儲65535個字符。
2.varchar可指定n,text不能指定,內部存儲varchar是存入的實際字符數+1個字節(n<=255)或2個字節(n>255),text是實際字符數+2個字節。
3.text類型不能有默認值。
4.varchar可直接建立索引,text建立索引要指定前多少個字符。查詢速度varchar要快於text,在都建立了索引的狀況下,text的索引好像沒起做用,參見這篇文章:http://forums.mysql.com/read.php?24,105964,105964

5.二進制數據(xxxBlob)
XXXBLOB和xxxtext是對應的,不過存儲方式不一樣,xxxTEXT是以文本方式存儲的,若是存儲英文的話區分大小寫,而xxxBlob是以二進制方式存儲的,不區分大小寫。
xxxBlob存儲的數據只能總體讀出。
xxxTEXT能夠指定字符集,xxxblob不用指定字符集。

6.日期時間類型(date,time,datetime,timestamp)
MySQL數據類型 含義 
date 日期'2008-12-2' 
time  時間'12:25:36' 
datetime 日期時間'2008-12-2 22:06:44' 
timestamp  不固定
timestamp比較特殊,若是定義一個字段的類型爲timestamp,這個字段的時間會在其餘字段修改的時候自動刷新。因此這個數據類型的字段能夠存放這條記錄最後被修改的時間,而不是真正來的存放時間。

數據類型的屬性
MySQL關鍵字 含義 
NULL  數據列可包含NULL值
NOT NULL 數據列不容許包含NULL值 
DEFAULT xxx 默認值,若是插入記錄的時候沒有指定值,將取這個默認值 
PRIMARY KEY  主鍵 
AUTO_INCREMENT  遞增,若是插入記錄的時候沒有指定值,則在上一條記錄的值上加1,僅適用於整數類型 
UNSIGNED  無符號 
CHARACTER SET name  指定一個字符集 

 發表於: 2008-11-27,修改於: 2008-12-02 22:12 已瀏覽1968次,有評論0條 推薦 投訴
相關文章
相關標籤/搜索