mysql資料型別分析 mysql資料型別選擇分析

2021-10-20 23:18:16 字數 1621 閱讀 9866

1 char varchar text的選擇

原則,最通用的並不是最適合的。

因為更改資料型別會耗費很長的時候,在定義的時候需要謹慎

例如存放密碼的md5加密資料,那麼我們就絕對用char(32) 因為char使用固定的block,具有更快的偏移速度。例如存放使用者名稱這樣的資料,長的使用者名稱最多也就25位吧,短的也3位以上,相差不大,我們也用char

文章內容建議用text了,因為它很多時候超過255位元組了。

ps:有些引擎不支援text 如 memory

2 varchar(255)和varchar(5)的選擇

原則:慷慨不是程式設計師的美德.

在改變資料長度限制是非常輕鬆的,不會造成長時間耗費,因此能小則小,在發現不夠用時候再按需要增大。

對於磁碟來說,varchar(255)和varchar(5)存放『joffe』資料塊占用的大小是一樣的,但更大的資料型別大小卻帶來更大的記憶體占用。

另外說明一點,這個數字是表示最大字數,不是位元組數 在utf-8下1就代表3位元組,gbk下1就代表2位元組。

3 int(10)與datetime型別的選擇

原則:平衡開發速度與機器效能。

我更傾向於int(10)unsigned,因為它方便。但對於資料庫來說,int(10)占用的空間和記憶體都比datatime稍微大。 int(10)可以直接存放linux時間戳 在php裡面直接time()就可以,而且可以根據需求用date()函式格式成任何自己喜歡的輸出形式。不過從資料庫的角度,datetime更節約機器資。

補充說明一下 int(1)和int(11)占用的磁碟空間都是一樣的

4盡量not null

原則:色即是空,空即使色,人不要太色,資料不能太空。

null 的話 其實會在每個資料都加上了1bit的標記。如果char varchar text等 建議用」來做預設而not null ,int tinyint等 建議用0做預設而not null

5、用int型別存放ip

原則:看清事實本質型別。

有些人用varchar(15)來放,這實在是浪費的,ip本來就是整數,32bit的整數 int(10)存放也就不錯。我也見過有人用char(4)存放,把ascii碼全用上了,這種極致的追求也相當不錯,不過mysql提供inet_aton()和inet_ntoa轉換ip和int型別,而php也有ip2long和long2ip,從開發角度來說,還是建議用int(10),另外說一句,char的大小是跟編碼有關係,在國內用char(4)反而增大了機器負擔。當然我更建議用php的 ip2long()和long2ip() 順帶說提提ip2long有個bug–ip比較大時候就會變負數,解決方法是先轉二進位制再轉回10進 — bindec( decbin( ip2long( 『ip位址』 ) ) );

6.char(0) null 與tinyint(1)模擬boolen之間爭奪

原則:過猶不及,請避免麻煩。

本來char(0) null 是模擬boolen最好的,因為只有『』和null兩種可能,在機器效能方面達到極致!但可惡的php是弱型別,在null和」之間有很多共通點,一不小心就中招了,在判斷方面引來很多麻煩,現在寫php的大多是團隊合作,某人不中招不代表人人不中。因此為了避免麻煩 還是推薦用tinyint(1),這個也是mysql推薦的做法。char(0) null 這就是單方面追求效能而導致麻煩。

解釋分析MySQL資料型別

資料庫儲存中的資料型別與大小各異。有些地方只儲存數字型別,有些只儲存文字型別,有些二者而兼之。而很多資料庫支援各種專用型別 日期和時間型別,二進位制字元型別以及布林型別。選擇資料型別與資料相匹配是資料庫設計中最為重要的部分,因為這種型別將會影響到rdbms的效率與效能。所以,對rdbms的資料型別選...

MySQL入門 資料型別分析

mysql的資料型別主要分為三類 數字型 字串型 日期和時間型別 需要學習者著重了解的是char與varchar的固定長度與可變長度的意義 int m 所代表的意義整型 部分 型別位元組 tinyint 1bool 1smallint 2int 也就是integer 4bigint 8浮點 部分 型...

mysq中的l資料型別

1 數值型別 整型和小數 例如 int 3 數字僅用於顯示,不顯示資料真正的範圍 float 和 double 屬於浮點,沒有小數字數的說法,精度差,主要體現在自動進行四捨五入的顯示,decimal 字串 unsigned 屬性把資料範圍擴大了一倍 2 字元型別 字元 blob text enum ...