mysql資料型別簡介

2021-06-26 01:48:37 字數 3365 閱讀 9541

表型別

mysql的資料表型別很多,其中比較重要的是myisam,innodb這兩種。

這兩種型別各有優缺點,需要根據實際情況選擇適合的,mysql支援對不同的表設定不同的型別。下面做個對比:

myisam表型別是一種比較成熟穩定的表型別,但是myisam對一些功能不支援。

myisam

innodb

事務不支援

支援資料行鎖定

不支援,只有表鎖定

支援外來鍵約束

不支援支援

表空間大小

相對小相對大,最大是2倍

全文索引

支援不支援

gis資料

支援不支援

count問題

無執行count(*)查詢時,速度慢

一般情況下我覺得選擇myisam就行,如果需要事務,或者需要很多使用者同時修改某個資料表裡的資料時,可以考慮innodb資料表。

資料型別

1.整型(***int)

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,***text)

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的索引好像沒起作用,參見這篇文章:

5.二進位制資料(***blob)

***blob和***text是對應的,不過儲存方式不同,***text是以文字方式儲存的,如果儲存英文的話區分大小寫,而***blob是以二進位制方式儲存的,不區分大小寫。

***blob儲存的資料只能整體讀出。

***text可以指定字符集,***blob不用指定字符集。

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 ***

預設值,如果插入記錄的時候沒有指定值,將取這個預設值

primary key

主鍵auto_increment

遞增,如果插入記錄的時候沒有指定值,則在上一條記錄的值上加1,僅適用於整數型別

unsigned

無符號character set name

指定乙個字符集

MySQL資料型別簡介

其中的長度以位元組為單位 名稱 長度 用法 tinyint m bit,bool,boolean 1 如果為無符號數,可以儲存從0到255的數 否則可以儲存從 128到127的數。smallint m 2 如果為無符號數,可以儲存從0到65535的數 否則可以儲存從 32768到32767的數。me...

MySQL資料型別簡介

近來把oracle資料庫換成mysql資料庫,oracle與mysql區別如下 1.nvl ifnull 2.oracle返回的list型別傳化為map時都為大寫的關鍵字儲存,mysql是看查詢語句是大寫還是小寫 3.mysql中connect by prior語句用不來 4.等繼 mysql資料型...

MySQL資料型別簡介

其中的長度以位元組為單位 名稱長度 用法tinyint m bit,bool,boolean 1 如果為無符號數,可以儲存從0到255的數 否則可以儲存從 128到127的數。smallint m 2 如果為無符號數,可以儲存從0到65535的數 否則可以儲存從 32768到32767的數。medi...