學習筆記 mysql中的資料型別(二)

2021-07-30 07:22:50 字數 2048 閱讀 4123

本文屬於讀書筆記,大部分內容摘抄於《高效能mysql》,摘抄內容版權屬於原作者。

日期和時間型別

mysql可以適用許多態別來儲存日期和時間值,例如year和date。mysql能儲存的最小時間粒度為秒(mariadb支援微秒級別的時間型別)。但是mysql可以適用微秒級別的粒度進行臨時運算。

datetime和timestamp是mysql提供的兩種相似的日期累心。對於很多應用程式,他們都能工作,但是在某些場景,乙個比另乙個工作的好。

datetime

這個型別能儲存大範圍的值,從2023年到2023年,精確度為秒。它把日期和時間封裝到格式為yyyymmddhhmmss的整數中,與時區無關。使用8個位元組的儲存空間。

預設情況下, mysql以一種可排序的、無歧義的格式顯示datetime值,例如「2008-01-16 22:23:03」。這是ansi標準定義的時間和日期表示方式。

timestamp

就像它的名字一樣,timestamp型別儲存了從12023年1月1日午夜(格林尼治標準時間)以來的秒數它和unix時間戳相同。timestamp只使用4個位元組的儲存空間,因此它的範圍ibisdatetime小得多:只能表從2023年到2023年。mysql提供了from_unixtime()函式能把unix時間轉換為日期,並提供了unix_timestamp()函式把日期轉換為iunix時間t

如果在多個市區儲存或訪問資料timestamp和datetime的行為將很不一樣。前者提供的值與時區有關,後者則保留文字表示的日期和時間。

插入timestamp的時候如果沒有指定第乙個timestamp列的值,mysql將設定這個列的值為當前時間。在插入一行記錄時,mysql預設也會更新第乙個timestamp列的值。你可以皮遏制任何timestamp列的插入和更新行為。最後timestamp列缺省為not null這也和其他的資料型別不一樣。

除了特殊行為之外。通常也應該盡量使用timestamp,因為它比datetime空間效率更高。有時候人們會將unix時間戳儲存為整數值,單著不會帶來任何收益。用整數儲存時間戳的格式通常不方便處理,所以真心不推薦這樣做。

目前mysql沒有提供合適的資料型別來儲存i秒更小粒度的日期和時間值。但事實可以用自己ide儲存格式:可以適用bigint型別儲存微秒級別的時間戳,或者用double儲存秒之後的小數部分。

位資料型別

mysql有少數幾種儲存型別使用緊湊的位儲存資料。所有這些位型別,不管底層儲存格式和處理方式如何,從技術上來說都是字串型別。

bit在5.0後的版本中,bit 已經不再是tinyint的同義詞,而變成了乙個特性完全不同的資料型別。

可以適用bit列在一列中儲存乙個或者多個true/false值。 bit(1)定義乙個包含單個位的字段,bit(2)儲存2個位,以此類推。bit列的最大長度是64個位。

mysql把bit作為字串型別,而不是數字型別。當檢索bit(1)的值的時候,結果是衣蛾包涵二進位制0或1值的字串,而不是ascii碼的「0」「1」。然而在上下文的場景中檢索時,結果將是位字串轉換成的數字。如果要和另外的值比較,一定要記得這一點。

set如果需要儲存很多的true/false值,可以考慮合併這些列到乙個set資料型別。它在mysql內部是以一系列打包的位的集合來表示的。這樣就笑笑李永樂儲存空間,並且mysql有像find_in_set()和field()這樣的函式,方便地砸查詢中使用。它的缺點主要是改變列的定義的代價較高:需要alter table,這對大表來說是非常昂貴的操作。一般來說也無法在set列上通過索引查詢。

在整數列上進行按位操作

一種代替set的方法是使用乙個整數包裝一系列的位。例如,可以吧8個位包裝到乙個tinyint中,並且按照未操作來使用。可以在應用中位為每個位定義名稱敞亮來簡化這個工作。

比起set這種辦法的好處主要在於可以不適用altertable改變字段代表的「列舉」值,缺點是查詢語句更男鞋,且更難理解。

特殊型別資料

某些型別的資料並不直接與內建一直,timestamp就是乙個例子。另乙個例子是ipv4位址。實際上ipv4位址是32位無符號整數而不是字串。用小數點分割只是方便大家理解,所以應該用無符號整數儲存ip位址。mysql提供inet_aton()和inet_ntoa()函式砸這兩種方法之轉換。

MySQL 資料型別(學習筆記)

mysql中定義資料欄位的型別對你資料庫的優化是非常重要的。mysql支援多種型別,大致可以分為三類 數值 日期 時間和字串 字元 型別。mysql支援所有標準sql數值資料型別。這些型別包括嚴格數值資料型別 integer smallint decimal和numeric 以及近似數值資料型別 f...

MySQL學習筆記 資料型別

方括號中的屬性可以在ddl語句中控制column的詳細屬性 一 整數型 1.int width unsigned zerofill mysql用4 bytes儲存int型資料,其值在 2,147,483,648到2,147,483,647之間,如果選擇了unsigned型別,那麼值在0到4,294,...

MySQL資料型別 學習筆記

一 整數型 1.int width unsigned zerofill mysql用4 bytes儲存int型資料,其值在 2,147,483,648到2,147,483,647之間,如果選擇了unsigned型別,那麼值在0到4,294,967,295。int和integer可以互換。width ...