Mysql資料類型

來源:互聯網
上載者:User

標籤:

所謂的資料類型:對資料進行統一的分類。從系統的角度出發,是為了使用統一的方式進行管理,更好的利用有限的空間。

SQL中將資料類型分了三大類:數實值型別、字串類型和時間日期類型

數值型

數值型資料:都是數值
系統將數值型分為整數型和小數型

整數型

存放整形資料:在SQL中 因為更多要考慮如何節省磁碟控制項,所以系統將整型又細分了5類
1. Tinyint:迷你整型,使用一個位元組儲存,表示的狀態最多為256種。(常用)
2. Smallint:小整型,使用2個位元組儲存,表示的狀態最多為65536中。
3. Mediumint:中整型,使用3個位元組儲存
4. Int:標準整型,使用4個位元組儲存(常用)
5. Bigint:大整型,使用8個位元組儲存

建立一張整型表

插入資料:智能插入整型,只能插入範圍內的資料

SQL中數實值型別全部都是預設有符號:分正負
有時候需要使用無符號資料:需要給資料類型限定:int unsigned

數值的插入

查看錶結構的時候,發現每個欄位的資料類型之後都會內建一個括弧,裡面有指定的數字,代表顯示寬度。

顯示寬度:沒有特別的含義,只是預設的告訴使用者可以顯示的形式而已,實際上使用者是可以控制的,這種控制不會改變資料本身的大小。

顯示寬度的意義:在於當資料不夠顯示寬度的時候,會自動讓資料編程對應的顯示寬度。通常需要搭配一個前置 0 來增加寬度,不改變值大小,zerofill(零填充),零填充會導致數值會自動變成無符號。

零填充 + 顯示寬度的效果:

零填充的意義(顯示寬度):保證資料格式

小數型

小數型:帶有小數點或者範圍超出整型的數實值型別。
SQL中:將小數型細分成兩種:浮點型和定點型
浮點型:小數點浮動,精度有限,而且會丟失精度
定點型:小數點固定,精度固定,不會丟失精度

浮點型

浮點型資料是一種精度型資料,因為超出指定範圍之後,會丟失精度(自動四捨五入)
浮點型:理論分為兩種精度
1. Float:單精確度,佔用 4 個位元組儲存資料,精度範圍大概為7位左右
2. Double:雙精確度,佔用 8 個位元組儲存資料,精度範圍大概為 15 位左右

建立浮點數表:浮點的使用方式,直接 float表示沒有小數部分,float(M,D):M代表總長度,D代表小數部分長度,整數部分長度為 M-D

插入資料:可以是直接小數,也可以是科學計數法

浮點型資料的插入:整數部分是不能超出長度的,但是小數部分可以超出長度(系統會自動四捨五入)

結果:浮點數一定會進行四捨五入,浮點數如果是因為系統進位導致整數部分超出指定長度,那麼系統也允許成立。

定點型

定點型:絕對的保證整數部分不會被四捨五入,小數部分有可能(理論上也不會丟失精度)

建立定點資料表:以浮點數作為對比

插入資料:定點數的整數部分一定不能超出長度,小數部分的長度可以隨意超出(四捨五入)

浮點數如果進位導致長度超出沒有問題,但是定點數不行。

查看資料:

===華麗的分割線===時間日期類型

datetime:時間日期,格式 YYYY-mm-dd HH:ii:ss,表示範圍是從1000 到 9999 年,有0值 0000-00-00 00::00:00
data:日期,就是 datetime 中的 date 部分
time:時間(段),指定的摸個區間之間
timestamp:時間戳記,並不是時間戳記,只是從 1970 年開始的 YYYY-mm-dd HH:ii:ss
year:年份,兩種形式,year(2) 和 year(4)

建立時間日期表

插入資料:時間time可以是負數,而且可以是很大的負數,year可以使用2位元插入,也可以使用4位元

timestamp欄位:只要當前所在的記錄被更新,該欄位一定會自動更新

字串類型

在SQL中,將字串類型分成了 6 類:char,varchar,text,blob,enum,set

定長字串:

定長字串:char。磁碟(二維表)在定義結構的時候,就已經確定了最終資料的儲存長度

char(L):L表示可以儲存的長度,單位為字元,最大長度值可以為255
char(4) 在 UTF8下,需要12個位元組

變長字串:

變長字串:varchar。在分配空間的時候,按照最大的空間分配,但是實際上最終用了多少,是根據具體的資料來確定。

varchar(L),L的理論長度是65536個字元,但是會多出 1~2個位元組來確定儲存的實際長度。
varchar(10) 的確存了10個漢字,utf8下 10*3 + 1 =31(bytes)
儲存 3 個漢字,3 * 3 +1 =10(bytes)

如何選擇定長或者變長字串呢?
定長的磁碟空間比較浪費,但是效率高。比如身份證,手機號,用定長
變長的磁碟空間比較節省,但是效率低。比如姓名,地址,用變長。

文本字串

如果資料量非常大,通常說超過255個字元,就會使用文本字串

文本字串根據儲存的資料的格式分為 text 和 blob
Text:儲存文字(位元據實際上都是儲存路徑)
Blob:儲存位元據(通常不用)

枚舉字串

枚舉:enum,事先將所有可能出現的結果都設計好,實際上儲存的資料必須是規定好的資料中的一個。

枚舉的使用方式
定義enum可能出現的元素列表: //如:enum(‘男’,’女’,’不男不女’,’妖’,’保密’);
使用:儲存資料,只能儲存上面定義好的資料。

建立枚舉表

加入資料:作用之一,規範資料格式

作用之二:節省儲存空間:枚舉實際儲存的是數值,而不是字串本身。

找出了枚舉元素的規律:按照元素出現的順序,從一開始編號。

枚舉原理:枚舉在進行資料規範的時候,系統會自動建立一個數字與枚舉元素的對應關係(關係放到日誌中),然後在進行資料插入的時候,系統自動將字元轉換成對應的數字儲存,然後在進行資料提取的時候,系統自動將數值轉換成對應的字串顯示。

因為枚舉實際儲存的是數值,,所以可以直接插入數字

集合字串

集合跟枚舉類似:實際儲存的是數值,而不是字串(集合是多選)

集合使用方式:
定義:set(元素列表)
使用:可以使用元素列表中的多個,使用逗號分割

插入資料:可以使用多個元素字串組合,也可以直接插入數值。

查看資料:數值 + 資料查看

集合中每一個元素都是對應一個對應二進位位

集合中元素的順序沒有關係,最終系統都會去匹配順序。

集合的強大在於能夠規範資料和節省空間的

Mysql 記錄長度

Mysql中規定:任何一條記錄最長不能超過 65535 個位元組(varchar永遠達不到理論值)
varchar實際儲存長度能達到多少呢?看字元集編碼
UTF8下varchar的實際頂配:21844
GBK下varchar的實際頂配:32766

想用完整個65535個位元組長度,增加一個tinyint欄位 (not null)

Mysql中text文本字串,不佔用記錄長度:額外儲存,但是text文本字串也是屬於記錄的一部分,一定需要佔據記錄中的部分長度:10個位元組(儲存資料的地址以及長度)

Mysql資料類型

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.