Mysql中數據類型括號中的數字代表的含義


相信大家不管是看別人的代碼,還是自己的代碼總會在定義表的數據類型時,會需要在數據類型后面加一個括號,里面寫一個參數,例如int(3),smallint(5),char(5)等,但是括號里面的數字到底是什么意思呢?我以前也是只會用,但是感覺自己是在瞎用,根本沒有注意到重點,今天寫個博客記錄下重點。

 

首先我們先來講講字符和字節的概念。

字節(Byte)是一種計量單位,表示數據量多少,它是計算機信息技術用於計量存儲容量的一種計量單位。

 字符是指計算機中使用的文字和符號,比如1、2、3、A、B、C、~!·#¥%……—*()——+、,中,國等等。

 字符和字節不存在絕對的關系,只是在不同的編碼格式里,對應的比值不一樣。比如:

1.UTF-8編碼中,一個英文字符等於一個字節,一個中文(含繁體)字符等於三個字節。

2.Unicode編碼中,一個英文等於兩個字節,一個中文(含繁體)字符等於兩個字節。

符號:英文標點占一個字節,中文標點占兩個字節。舉例:英文句號“.”占1個字節的大小,中文句號“。”占2個字節的大小。

3.UTF-16編碼中,一個英文字母字符或一個漢字字符存儲都需要2個字節(Unicode擴展區的一些漢字存儲需要4個字節)。

4.UTF-32編碼中,世界上任何字符的存儲都需要4個字節。

 

所有你看見的單個字:a,啊,都叫字符。

 

char和varchar括號中的數字含義。

char的列長度是固定的,char的長度可選范圍在0-255字符之間。也就是char最大能存儲255個字符.

varchar的列長度是可變的,在mysql5.0.3之前varchar的長度范圍為0-255字符,mysql5.0.3之后varchar的長度范圍為0-65535個字節.

CHAR(M)定義的列的長度為固定的,M取值可以為0-255之間,當保存CHAR值時,在它們的右邊填充空格以達到指定的長度。當檢索到CHAR值時,尾部的空格被刪除掉。在存儲或檢索過程中不進行大小寫轉換。CHAR存儲定長數據很方便,CHAR字段上的索引效率級高,比如定義char(10),那么不論你存儲的數據是否達到了10個字符,都要占去10個字符的空間,不足的自動用空格填充。

VARCHAR(M)定義的列的長度為可變長字符串,VARCHAR的最大有效長度由最大行大小和使用的字符集確定。整體最大長度是65,532字節。VARCHAR值保存時不進行填充。當值保存和檢索時尾部的空格仍保留,符合標准SQL。varchar存儲變長數據,但存儲效率沒有CHAR高。如果一個字段可能的值是不固定長度的,我們只知道它不可能超過10個字符,把它定義為 VARCHAR(10)是最合算的。VARCHAR類型的實際長度是它的值的實際長度+1。為什么"+1"呢?這一個字節用於保存實際使用了多大的長度。從空間上考慮,用varchar合適;從效率上考慮,用char合適,關鍵是根據實際情況找到權衡點。

簡單來說:varchar(m)里面表示的是長度,例如:varchar(5)表示最大可存儲5個中文或5個英文字母。 

 

int smallint等數據類型括號中的數字含義。

類型  
大小 范圍(有符號) 范圍(無符號) 用途
TINYINT 1字節 (-128,127) (0,255) 小整數值
SMALLINT 2字節 (-32 768,32 767) (0,65535) 大整數值
MEDIUMINT 3字節 (-8 388 608,8 388 607)
(0,16 777 215)
大整數值
INT 4字節
(-2 147 483 648,2 147 483 647) (0,4 294 967 295) 
(0,4 294 967 295) 
大整數值
BIGINT 8字節
(-9 233 372 036 854 775 808,9 223 372 036 854 775 807)
(0,18 446 744 073 709 551 615)
極大整數值

這些類型,是定長的,其容量是不會隨着后面的數字而變化的,比如int(11)和int(8),都是一樣的占4字節。tinyint(1)和tinyint(10)也都占用一個字節。

那么后面的11和8,有啥用呢。

數據類型(m)中的m不是表示的數據長度,而是表示數據在顯示時顯示的最小長度。tinyint(1) 這里的1表示的是 最短顯示一個字符。tinyint(2) 這里的2表示的是 最短顯示兩個字符。

當字符長度(m)超過對應數據類型的最大表示范圍時,相當於啥都沒發生;

當字符長度(m)小於對應數據類型的表示范圍時,就需要指定拿某個字符來填充,比如zerofill(表示用0填充),

設置tinyint(2) zerofill 你插入1時他會顯示01;設置tinyint(4) zerofill 你插入1時他會顯示0001。

即使你建表時,不指定括號數字,mysql會自動分配長度:int(11)、tinyint(4)、smallint(6)、mediumint(9)、bigint(20)。

 

推薦兩篇博客:

實際驗證varchar和char括號中數字表示的是字符

關於int smallint中括號中數字表示的是顯示寬度


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM