MySQL中資料型別的長度問題總結

2021-08-15 03:18:48 字數 2766 閱讀 3296

1):int型別,對吧,經常像儲存個時間戳啊、id啊、數量啊、排序啊都會用到

提問:int(11)是什麼意思?最大儲存十一位數麼?

回答:不是楞個回事,聽我給你擺,首先長度,也就是int(m),m指示最大顯示寬度,不是說限制你只能插入規定長度的資料,如果不信你試一下:int(1),你可以插數字1,也可以插100,1000。那到底是撒子意思耶?mysql手冊上頭說的清清楚楚:

m指示最大顯示寬度,最大有效顯示寬度是255。顯示寬度與儲存大小或型別包含的值的範圍無關

好,這下曉得的撒?我們指定的int(10)、int(11)是指定顯示寬度,不是儲存大小或者值的範圍,再看乙個例子:

int(3)的情況下 插入數字20,和數字2以及數字200,顯示結果為:

020;

002;

200;

mysql還支援選擇在該型別關鍵字後面的括號內指定整數值的顯示寬度(例如,int(3))。該可選顯示寬度規定用於顯示寬度小於指定的列寬度的值時從左側填滿寬度。顯示寬度並不限制可以在列內儲存的值的範圍,也不限制超過列的指定寬度的值的顯示。

說白了就是你設定最大寬度,插入的資料不夠大,就從填充0,給你填滿,夠大就隨便你,不得管你。這下就很通透了撒,哈哈~(但是強烈建議合理分配,過大過小都不好)

tip:對於int型別的,如果不需要訪問負值,最好加上unsigned;對於經常出現在where語句中的字段,考慮加索引,整形尤其適合加索引。

2):varchar和char 型別,先varchar,經常用的比如使用者名稱之類可變長度,那就說使用者名稱吧

提問:你說這個使用者名稱,varchar(20)是撒子意思噢?(當然自己把握,沒說必須20),這是規定長度了吧?用沒得限制哦?漢字英文都是一樣的邁?

回答:對頭,就是可變長度,你闊以叫渣渣輝,也闊以叫烏木喂喂威 恩耶吞溫威 烏溫穆扁 歐薩斯,20個字元以內都闊以

說到是不是中英文都一樣20個字元,在mysql5.0之後:是的,一樣。但在低版本中,英文肯定還是20,但中文要diao一點,乙個佔三個位元組,所以存不了20個漢字,最多就6,7個??

然後說char,也就是固定長度了,比如密碼,常見的md5加密,就是char(32)對吧,多了少了都不行。

他們倆的區別就是乙個可變長度乙個固定長度,長度的區別char是0-255,varchar最大長度不固定(64k?反正一般文字夠用),存在像字符集不同會受影響之類的因素,感興趣可以自己去查查,我……曉得撒(懶)。大文字可以考慮text,都是字串型別的,最大到4g。

然後想說的是

1. 如果知道文字的長度,最好直接用定長char。

2. char>varchar>text。(具體以儲存引擎而定)

3. char和varchar可以有預設值,text不能指定預設值。

4. 盡可能節約空間使用更短的列,分配真正需要的空間,10和100都能存「你好」,懂得起撒

最後是數值型中的decimal資料型別,看到一段描述:

float:浮點型,含位元組數為4,32bit,數值範圍為-3.4e38~3.4e38(7個有效位)

double:雙精度實型,含位元組數為8,64bit數值範圍-1.7e308~1.7e308(15個有效位)

decimal:數字型,128bit,不存在精度損失,常用於銀行帳目計算。(28個有效位)

因為在建表時,我**欄位就用的decimal,之前用的float,

提問:為什麼不用float?

回答:float,double等非標準型別,在資料庫中儲存的是近似值,而decimal是以字串的形式儲存數值。打個比方,我存的是整數的時候,他就整數給我處理了,(舉一反三??)我存0.00給我實際存個0,我存14.00實際給我存個14,是都可以存浮點數,但是涉及到錢,金額這方面還是給我精準著來。

decimal(m,d)

a指定指定小數點左邊和右邊可以儲存的十進位制數字的最大個數,最大精度38。

b指定小數點右邊可以儲存的十進位制數字的最大個數。小數字數必須是從 0 到 a之間的值。預設小數字數是 0。

也就是說,m就是總長度,d就是小數點後面的長度。比如:

decimal(5,4)=>總長度不超過5位數字,並且小數點後頭必須要4位數字:1.2345

decimal(14,9)=>總長度5位數字,整數5位,小數點後9位:12345.123456789

注意:

超出範圍或者長度不夠會被截斷或補位

example:decimal(9,4)

insert 12.12=>12.1200 因為小數點後未滿4位,補0。

insert 12.12345=>12.1235 小數點只留4位,多餘的自動四捨五入截斷

insert 1234567.12=> 失敗,因為小數點未滿4位,補0變成1234567.1200,超過了9位。嚴格模式下報錯,非嚴格模式存成999999.999。

若插入的值未指定小數部分或者小數部分不足d位則會自動補到d位小數,若插入的值小數部分超過了d為則會發生截斷,擷取前d位小數。m值得是整數部分加小數部分的總長度,也即插入的數字整數部分不能超過m-d位,否則不能成功插入,會報超出範圍的錯誤。

可能失誤操作,感興趣請自己嘗試驗證結果

「真實,正義,無畏,同情。」

mysql中int資料型別長度的問題

mysql中定義了int資料型別後,後面填寫的長度具體有什麼用?如果長度為4,請問最大的數是多少?如果是自增的可以是多少條?這些問題,您都可以在下文中找到答案。在定義了mysql中int資料型別後,後面填寫的長度有什麼用呢?下文將對mysql中int資料型別長度進行詳細的介紹,希望對您能有所幫助。m...

mysql中int資料型別長度的問題

在定義了mysql中int資料型別後,後面填寫的長度有什麼用呢?下文將對mysql中int資料型別長度進行詳細的介紹,希望對您能有所幫助。mysql中int資料型別長度最大為11位,最少為4位,不夠在前面補空格。這個可選的寬度規格說明是用於在數值顯示時,對某些值的寬度短於該列 寬度的值進行左填補顯示...

MySQL中資料型別的長度問題總結

1 int型別,對吧,經常像儲存個時間戳啊 id啊 數量啊 排序啊都會用到 提問 int 11 是什麼意思?最大儲存十一位數麼?回答 不是楞個回事,聽我給你擺,首先長度,也就是int m m指示最大顯示寬度,不是說限制你只能插入規定長度的資料,如果不信你試一下 int 1 你可以插數字1,也可以插1...