MySQL資料型別及欄位屬性

2021-09-23 17:49:51 字數 2682 閱讀 4260

mysql 資料型別mysql中定義資料欄位的型別對你資料庫的優化是非常重要的。mysql支援多種型別,大致可以分為三類:

數值 日期/時間

字串(字元)

mysql支援所有標準sql數值資料型別。

這些型別包括嚴格數值資料型別(integer、smallint、decimal和numeric),以及近似數值資料型別(float、real和double precision)。

表示時間值的日期和時間型別為datetime、date、timestamp、time和year。

每個時間型別有乙個有效值範圍和乙個」零」值,當指定不合法的mysql不能表示的值時使用」零」值。timestamp型別有專有的自動更新特性。

字串型別指char、varchar、binary、varbinary、blob、text、enum和set。該節描述了這些型別如何工作以及如何在查詢中使用這些型別。

char和varchar型別類似,但它們儲存和檢索的方式不同。它們的最大長度和是否尾部空格被保留等方面也不同。在儲存或檢索過程中不進行大小寫轉換。

1.char(n) 若存入字元數小於n,則以空格補於其後,查詢之時再將空格去掉。所以char型別儲存的字串末尾不能有空格,varchar不限於此。

2.char(n) 固定長度,char(4)不管是存入幾個字元,都將占用4個位元組,varchar是存入的實際字元數+1個位元組(n<=255)或2個位元組(n>255),所以varchar(4),存入3個字元將占用4個位元組。

3.char型別的字串檢索速度要比varchar型別的快。

1.varchar可指定n,text不能指定,內部儲存varchar是存入的實際字元數+1個位元組(n<=255)或2個位元組(n>255),text是實際字元數+2個位元組。

2.text型別不能有預設值。

3.varchar可直接建立索引,text建立索引要指定前多少個字元。varchar查詢速度快於text,在都建立索引的情況下,text的索引似乎不起作用。

類類似於char和varchar,不同的是它們包含二進位制字串而不要非二進位制字串。也就是說,它們包含位元組字串而不是字元字串。這說明它們沒有字符集,並且排序和比較基於列值位元組的數值值。

blob是乙個二進位製大物件,可以容納可變數量的資料。有4種blob型別:tinyblob、blob、mediumblob和longblob。它們只是可容納值的最大長度不同。有4種text型別:tinytext、text、mediumtext和longtext。這些對應4種blob型別,有相同的最大長度和儲存需求。

1._blob和_text儲存方式不同,_text以文字方式儲存,英文儲存區分大小寫,而_blob是以二進位制方式儲存,不分大小寫。

2._blob儲存的資料只能整體讀出。

3._text可以指定字符集,_blo不用指定字符集。

mysql有如下字段屬性:

mysql關鍵字

含義null

資料列可包含null值

not null

資料列不允許包含null值

default

預設值primary key

主鍵auto_increment

自動遞增,適用於整數型別

unsigned

無符號character set name

指定乙個字符集

mysql支援給乙個數值型別新增乙個length屬性,它代表這個字段值的展示寬度。比如int(4)定義了這個欄位會按四個字元的寬度進行展示。這個功能有什麼用呢?當我們在查詢這個欄位時,如果字段值小於定義的展示寬度,那麼在展示時系統會自動在這個數值的左側通過空格進行補齊。

這個length屬性只是定義了展示數值的寬度,絕對不會影響數值實際儲存的大小。不管我們定義的是int(4)、int(11)還是int(20),我們最終儲存的數值大小都佔4個位元組, 範圍都是 (-2 147 483 648,2 147 483 647)。當實際儲存的數值寬度大於我們定義的寬度時,會按實際寬度進行展示。比如我們定義的寬度時int(5),而實際數值是123456共6位,那麼查詢時顯示的還是123456。

總之一句話,length屬性只會在實際數值寬度小於我們定義的寬度時才用空格進行補齊,任何情況下都不會影響實際數值的儲存和展示。

當length屬性結合zerofill屬性一起使用時,補齊的就不是空格了,而是0。比如我們定義的列屬性為int(4) zerofill,如果資料庫中儲存的值是5的話,查詢出來便會是0005。注意,此時資料庫中的值依然是5,只是查詢出來是0005。

如果我們使用了unsigned,則儲存的最大值翻倍,如tinyint unsigned的取值範圍就由(-128~127)變成了(0~256)。

如果我們定義的列是zerofill的,那麼mysql會自動給這個列加上unsigned屬性。

如果我們給乙個列新增了autoincrement屬性,那麼當我們插入null或0值時,列值便會自動設定成下乙個序列號,一般是當前value+1。注意,只有當列值屬性設定為not null時,插入null值才會autoincrement,否則便會直接插入null值。

mysql的資料型別和字段屬性

tinyint 1個位元組 smallint 2個位元組 mediumint 3個位元組 int 4個位元組 bigint 8個位元組 float 4個位元組 double 8個位元組 decimal 字串形式的浮點數,一般用於金融計算 char 字串固定的大小 0 255 varchar 可變字串...

mysql資料型別屬性 MySQL資料型別和屬性

mysql資料型別和屬性 2010 10 19 11 54 48 標籤 mysql 資料型別 雜談資料型別和屬性 對mysql表每個列中的資料實行嚴格的控制,這是資料驅動應用程式成功的關鍵。這些資料型別的行為可以通過包含屬性 attribute 進一步調整。資料型別分為三種類別 日期和時間 數值以及...

mysql 資料型別選擇 Mysql欄位型別選擇

1.欄位型別選擇 1.1盡量少的佔據儲存空間 int整形 年齡 tinyint 1個位元組 0 255之間 烏龜年齡 smallint 2個位元組 0 2的16次方 mediumint 3個位元組 0 2的24次方 int 4個位元組 0 2的32次方 bigint 8個位元組 0 2的64次方 時...