MySQL資料類型和常用欄位屬性總結

來源:互聯網
上載者:User

標籤:

前言

好比C++中,定義int類型需要多少位元組,定義double類型需要多少位元組一樣,MySQL對錶每個列中的資料也會實行嚴格控制,這是資料驅動應用程式成功的關鍵。MySQL提供了一組可以賦給表中各個列的資料類型,每個類型都強制資料滿足為該資料類型預先確定的一組規則,例如大小、類型及格式。

這裡先總結資料類型。MySQL中的資料類型大的方面來分,可以分為:日期和時間、數值,以及字串。下面就分開來進行總結。

日期和時間資料類型
MySQL資料類型 含義
date 3位元組,日期,格式:2014-09-18
time 3位元組,時間,格式:08:42:30
datetime 8位元組,日期時間,格式:2014-09-18 08:42:30
timestamp 4位元組,自動儲存記錄修改的時間
year 1位元組,年份
數值資料類型

整型

MySQL資料類型 含義(有符號)
tinyint 1位元組,範圍(-128~127)
smallint 2位元組,範圍(-32768~32767)
mediumint 3位元組,範圍(-8388608~8388607)
int 4位元組,範圍(-2147483648~2147483647)
bigint 8位元組,範圍(+-9.22*10的18次方)

上面定義的都是有符號的,當然了,也可以加上unsigned關鍵字,定義成無符號的類型,那麼對應的取值範圍就要翻翻了,比如:

tinyint unsigned的取值範圍為0~255。

浮點型

MySQL資料類型 含義
float(m, d) 4位元組,單精確度浮點型,m總個數,d小數位
double(m, d) 8位元組,雙精確度浮點型,m總個數,d小數位
decimal(m, d) decimal是儲存為字串的浮點數

我在MySQL中建立了一個表,有一列為float(5, 3);做了以下實驗:

  1. 插入123.45678,最後查詢得到的結果為99.999;
  2. 插入123.456,最後查詢結果為99.999;
  3. 插入12.34567,最後查詢結果為12.346;

所以,在使用浮點型的時候,還是要注意陷阱的,要以插入資料庫中的實際結果為準。

字串資料型別
MySQL資料類型 含義
char(n) 固定長度,最多255個字元
varchar(n) 可變長度,最多65535個字元
tinytext 可變長度,最多255個字元
text 可變長度,最多65535個字元
mediumtext 可變長度,最多2的24次方-1個字元
longtext 可變長度,最多2的32次方-1個字元
  1. char(n)和varchar(n)中括弧中n代表字元的個數,並不代表位元組個數,所以當使用了中文的時候(UTF8)意味著可以插入m個中文,但是實際會佔用m*3個位元組。
  2. 同時char和varchar最大的區別就在於char不管實際value都會佔用n個字元的空間,而varchar只會佔用實際字元應該佔用的空間+1,並且實際空間+1<=n。
  3. 超過char和varchar的n設定後,字串會被截斷。
  4. char的上限為255位元組,varchar的上限65535位元組,text的上限為65535。
  5. char在儲存的時候會截斷尾部的空格,varchar和text不會。
  6. varchar會使用1-3個位元組來儲存長度,text不會。
其它類型
  1. enum(“member1″, “member2″,  … “member65535″)
    enum資料類型就是定義了一種枚舉,最多包含65535個不同的成員。當定義了一個enum的列時,該列的值限制為列定義中聲明的值。如果列聲明包含NULL屬性,則NULL將被認為是一個有效值,並且是預設值。如果聲明了NOT NULL,則列表的第一個成員是預設值。
  2. set(“member”, “member2″, … “member64″)
    set資料類型為指定一組預定義值中的零個或多個值提供了一種方法,這組值最多包括64個成員。值的選擇限制為列定義中聲明的值。
資料類型屬性

上面大概總結了MySQL中的資料類型,當然了,上面的總結肯定是不全面的,如果要非常全面的總結這些內容,好幾篇文章都不夠的。下面就再來總結一些常用的屬性。

  1. auto_increment
    auto_increment能為新插入的行賦一個唯一的整數標識符。為列賦此屬性將為每個新插入的行賦值為上一次插入的ID+1。
    MySQL要求將auto_increment屬性用於作為主鍵的列。此外,每個表只允許有一個auto_increment列。例如:

     

    id smallint not null auto_increment primary key
  2. binary
    binary屬性只用於char和varchar值。當為列指定了該屬性時,將以區分大小寫方式排序。與之相反,忽略binary屬性時,將使用不區分大小寫方式排序。例如:

     

    hostname char(25) binary not null
  3. default
    default屬性確保在沒有任何值可用的情況下,賦予某個常量值,這個值必須是常量,因為MySQL不允許插入函數或運算式值。此外,此屬性無法用於BLOB或TEXT列。如果已經為此列指定了NULL屬性,沒有指定預設值時預設值將為NULL,否則預設值將依賴於欄位的資料類型。例如:

     

    subscribed enum(‘0‘, ‘1‘) not null default ‘0‘
  4. index
    如果所有其他因素都相同,要加速資料庫查詢,使用索引通常是最重要的一個步驟。索引一個列會為該列建立一個有序的鍵數組,每個鍵指向其相應的表行。以後針對輸入條件可以搜尋這個有序的鍵數組,與搜尋整個未索引的表相比,這將在效能方面得到極大的提升。

     

    create table employees(    id varchar(9) not null,    firstname varchar(15) not null,    lastname varchar(25) not null,    email varchar(45) not null,    phone varchar(10) not null,    index lastname(lastname),    primary key(id));
    我們也可以利用MySQL的create index命令在建立表之後增加索引:
    create index lastname on employees (lastname(7));
    這一次只索引了名字的前7個字元,因為可能不需要其它字母來區分不同的名字。因為使用較小的索引時效能更好,所以應當在實踐中盡量使用小的索引。
  5. not null
    如果將一個列定義為not null,將不允許向該列插入null值。建議在重要情況下始終使用not null屬性,因為它提供了一個基本驗證,確保已經向查詢傳遞了所有必要的值。
  6. null
    為列指定null屬性時,該列可以保持為空白,而不論行中其它列是否已經被填充。記住,null精確的說法是“無”,而不是Null 字元串或0。
  7. primary key
    primary key屬性用於確保指定行的唯一性。指定為主鍵的列中,值不能重複,也不可為空。為指定為主鍵的列賦予auto_increment屬性是很常見的,因為此列不必與行資料有任何關係,而只是作為一個唯一識別碼。主鍵又分為以下兩種:
    (1)單欄位主鍵
    如果輸入到資料庫中的每行都已經有不可修改的唯一識別碼,一般會使用單欄位主鍵。注意,此主鍵一旦設定就不能再修改。
    (2)多欄位主鍵
    如果記錄中任何一個欄位都不可能保證唯一性,就可以使用多欄位主鍵。這時,多個欄位聯合起來確保唯一性。如果出現這種情況,指定一個auto_increment整數作為主鍵是更好的辦法。
  8. unique
    被賦予unique屬性的列將確保所有值都有不同的值,只是null值可以重複。一般會指定一個列為unique,以確保該列的所有值都不同。例如:

     

    email varchar(45) unique
  9. zerofill
    zerofill屬性可用於任何數實值型別,用0填充所有剩餘欄位空間。例如,無符號int的預設寬度是10;因此,當“零填充”的int值為4時,將表示它為0000000004。例如:

     

    orderid int unsigned zerofill not null

總結完畢!!!

MySQL資料類型和常用欄位屬性總結

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.