MySQL中的資料型別的選擇

2021-07-25 06:03:20 字數 4811 閱讀 8496

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)

int4位元組,範圍(-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是儲存為字串的浮點數

1. float 預設只儲存6位(除去小數點),如果超過6位,則四捨五入,所以float儲存的資料是不精確的,只是近似值;

2. decimal,如果輸入的資料超過了定義的最大值,那麼則溢位,資料庫裡面儲存的是定義的最大值,例如,decimal(5,2)輸入123123.45,實際儲存為999.99;

3. decimal,如果只是小數部分超過定義的長度,那麼則截斷(非四捨五入)指定長度,例如,decimal(10,2)輸入12345678.123456,實際儲存為12345678.12;

4. decimal,整數部分和小數部分是分開儲存的,每9個數字占用4個位元組,在mysql內部使用的二進位制儲存,基本沒有長度的限制;

建議:1. 盡量不用float型別;

2. 存錢之類的資料,使用int(bigint)來存,在計算的時候除以100;

3. 一定要存小數的話,decimal是不錯的選擇,但是需要考慮到資料的範圍問題,以防越界產生的錯誤;

字串資料型別

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精確的說法是「無」,而不是空字串或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的資料型別選擇

選擇合適的資料型別對於獲得高效能至關重要 1.更小的通常更好 盡量使用正確儲存資料的最小資料型別,它們通常更快,因為它們占用更小的磁碟空間 記憶體和cpu快取,並且處理時需要的cpu週期更少。2.簡單就好 簡單的儲存型別通常需要更少的cpu週期。例如 整型比字元操作代價更低,因為字符集和校對規則使字...

MySQL資料型別 資料型別選擇

在mysq中建立表時,需要考慮為字段選擇哪種資料型別是最合適的。選擇合適的資料型別,會提高資料庫的效率。整數型別和浮點數型別最大的區別在於能否表達小數。整數型別不能表示小數,而浮點數型別可以表示小數。不同的整數型別的取值範圍不同。tinyint型別的取值範圍是0 255。如果欄位的最大值不超過255...

mysql資料型別選擇 mysql中資料型別的選擇

在前期資料量不大的時候一般也不用考慮哪個欄位用什麼資料型別,但是等資料量大的時候就得考慮資料庫的優化啦,這個時候就得嚴格什麼樣的資料用什麼樣的資料型別才能提高效率下面整理下各種資料型別的使用選擇 資料型別和範圍 數字型別 tinyint 有符號 128 127 無符號 0 255 的整型資料。儲存大...