天天看點

Mysql資料庫學習(二):資料類型(數值類型 日期和時間類型 字元串類型)

資料類型

數值類型 日期和時間類型 字元串類型
Mysql資料庫學習(二):資料類型(數值類型 日期和時間類型 字元串類型)

一、數值類型

整數

Mysql資料庫學習(二):資料類型(數值類型 日期和時間類型 字元串類型)

tinyint[M] [unsigned] [zerofill]    // [ ] 表示可選,這裡的M表示顯示寬度,并不是取值範圍,顯示寬度不夠前面以0填充

bool是tinyint(1)的别名

浮點型

IEEE 754浮點數表示

S:符号位 E:指數位 M:尾數位,也叫有效數字位 N =(-1)^S * M * 2^E

單精度float 4個位元組 ,取值範圍-3.402823466E+38~3.402823466E+38, 精度大約7位

雙精度double 8個位元組,取值範圍  -1.7976931348623157E+308~1.7976931348623157E+308, 精度大約15位

Mysql資料庫學習(二):資料類型(數值類型 日期和時間類型 字元串類型)
Mysql資料庫學習(二):資料類型(數值類型 日期和時間類型 字元串類型)

DOUBLE[(M,D)] [UNSIGNED] [ZEROFILL]  // M總位數,D是小數點後面的位數,這裡是取值範圍

real是double的别名

定點型

DECIMAL[(M[,D])] [UNSIGNED] [ZEROFILL]  //M預設是10,D預設是0

decimal取值範圍與double是一樣的,但是有更高的精度。

decimal存儲方式,參考:http://dev.mysql.com/doc/refman/5.1/zh/precision-math.html

numeric是decimal的别名

二、字元串類型

char(M)

varchar(M)  //這裡的M表示字元數

Mysql資料庫學習(二):資料類型(數值類型 日期和時間類型 字元串類型)

CHAR列的長度固定為建立表時聲明的長度。長度可以為從0到255的任何值。當儲存CHAR值時,在它們的右邊填充空格以達到指定的長度。當檢索到CHAR值時,尾部的空格被删除掉。在存儲或檢索過程中不進行大小寫轉換。

VARCHAR列中的值為可變長字元串。長度可以指定為0到65,535之間的值。VARCHAR的最大有效長度由最大行大小和使用的字元集确定。舉例來說,如果字元集為uft8,那麼一個字元需要3個位元組來存儲,則可以儲存的字元數為65535/3=21845,此外還需要一個字元的位置來存儲字元個數,故最大可填寫的字元數為21844。若是latin1,一個字元隻需1個位元組存儲,那麼可填寫的字元數為65532。

binary/varbinary

BINARY和VARBINARY 類似于CHAR和VARCHAR,不同的是它們包含二進制字元串。也就是說,它們包含位元組字元串而不是字元字元串。這說明它們沒有字元集,并且排序和比較基于列值位元組的數值。

字元串存儲需求

Mysql資料庫學習(二):資料類型(數值類型 日期和時間類型 字元串類型)

VARCHAR、BLOB和TEXT類是變長類型。每個類型的存儲需求取決于列值的實際長度(用前面的表中的L表示),而不是該類型的最大可能的大小。例如,VARCHAR(10)列可以容納最大長度為10的字元串。實際存儲需求是字元串(L)的長度,加上一個記錄字元串長度的位元組。對于字元串'abcd',L是4,存儲需要5個位元組。

對于CHAR、VARCHAR和TEXT類型,前面的表中的值L和M應解釋為字元數目,并且列定義中的這些類型的長度表示字元數目。例如,要想儲存一個TINYTEXT值需要L字元+ 1個位元組。

enum/set

枚舉/集合看過去像是字元串,實際上儲存的是整數。

三、日期和時間

Mysql資料庫學習(二):資料類型(數值類型 日期和時間類型 字元串類型)

日期和時間看起來像字元串,但是以整數來儲存的。

參考:

《資料庫系統概論》

mysql 5.1 參考手冊