數(shù)據(jù)類型

整型

類型 空間 說明(默認(rèn)有符號)
TINYINT 1字節(jié) 取值范圍:-2^7 ~ 2^7-1
SMALLINT 2字節(jié) 取值范圍:-2^15 ~ 2^15-1
MEDIUMINT 3字節(jié) 取值范圍:-2^23 ~ 2^32-1
INT 4字節(jié) 取值范圍:-2^31 ~ 2^31-1
BIGINT 8字節(jié) 取值范圍:-2^63 ~ 2^63-1

值得注意的是,TINYINT(1)代表java語言中的boolean,1/0代表true/false。mysql本身沒有boolean類型。

實(shí)數(shù)

類型 空間 說明(默認(rèn)有符號)
FLOAT 4字節(jié) 單精度,存在精度損失(7個有效位),取值范圍:-3.402823466E+38 ~ -1.175494351E-38
DOUBLE 8字節(jié) 雙精度,存在精度損失(15個有效位),取值范圍: -1.7976931348623157E+308 ~ -2.2250738585072014E-308
DECIMAL DECIMAL(M,D),M+2字節(jié) M是數(shù)字的最大數(shù)目。其范圍為1~65,M的默認(rèn)值是10;D是小數(shù)點(diǎn)右側(cè)數(shù)字的數(shù)目。其范圍是0~30,但不得超過M。例如:DECIMAL(6,3),6 + 2 = 8字節(jié),取值范圍:-999.999 ~ 999.999(注意符號和小數(shù)點(diǎn)各占用一個字節(jié))
  • 對于DECIMAL類型,Mysql5.0或者更高版本將數(shù)字打包保存到一個二進(jìn)制字符串中(每4個字節(jié)存9個數(shù)字)。例如DECIMAL(18,9)小數(shù)兩邊各存儲9個數(shù)字,一共使用9個字節(jié):小數(shù)點(diǎn)前面4個字節(jié),小數(shù)點(diǎn)本身一個字節(jié),小數(shù)點(diǎn)后面4個字節(jié)。
  • 浮點(diǎn)類型(FLOAT、DOUBLE)在存儲同樣范圍的值時,通常比DECIMAL使用更少空間。所以應(yīng)該盡量只對小數(shù)進(jìn)行精確計(jì)算時才使用DECIMAL(例如財務(wù)數(shù)據(jù))。

日期與時間

類型 空間 說明(默認(rèn)有符號)
YEAR 1字節(jié) 年份,格式:YYYY,范圍:1901 ~ 2155
TIME 3字節(jié) 時分秒,格式:HH:MM:SS,范圍:-838:59:59 ~ 838:59:59
DATE 3字節(jié) 年月日,格式:YYYY-MM-DD,范圍:1000-01-01 ~ 9999-12-3
DATETIME 8字節(jié) 年月日 時分秒,格式:YYYY-MM-DD HH:MM:SS,范圍:1000-01-01 00:00:00 ~ 9999-12-31 23:59:59
TIMESTAMP 4字節(jié) 年月日 時分秒(跟時區(qū)相關(guān),按照UTC格式保存),格式:YYYY-MM-DD HH:MM:SS,范圍:1970-01-01 00:00:01 UTC ~ 2038-01-19 03:14:07 UTC

字符串

類型 空間 說明(默認(rèn)有符號)
CHAR 最多255個字符 固定長度
VARCHAR 最多65 535個字符 可變長度
TINYTEXT 最多255個字符 短文本
TEXT 最多65 535個字符 文本
MEDIUMTEXT 最多16 777 215個字符 中等長度文本
LONGTEXT 最多4 294 967 295個字符 超長文本
TINYBLOB 最多255個字節(jié) 短二進(jìn)制字符串
BLOB 最多65 535個字節(jié) 二進(jìn)制字符串
MEDIUMBLOB 最多16 777 215個字節(jié) 中等長度二進(jìn)制字符串
LONGBLOB 最多4 294 967 295個字節(jié) 超長二進(jìn)制字符串
  • CHAR與VARCHAR

    • CHAR
      • 是定長的,一開始分配固定的空間,不容易產(chǎn)生碎片;
      • 當(dāng)存儲CHAR時,Mysql會刪除所有的末尾空格;
      • 適合存儲很短且所有值長度接近的字符串;
    • VARCHAR
      • 是可變長度的,比定長類型更節(jié)省空間;
      • VARCHAR = ‘1(值長度<=255)或2(值長度>255)個字節(jié)記錄字符串長度’ + ‘值長度’;
      • update操作時,有可能讓值變長,會導(dǎo)致額外的工作(在頁沒有更多空間可以存儲的時候,不同存儲引擎處理方式是不一樣的,例如MyISAM會將行拆成不同的片段存儲,InnoDB采用頁分裂方式);
      • 指定大小不能過長,例如:使用VARCHAR(5)和VARCHAR(200)磁盤存儲‘hello’的空間開銷是一樣的,但是更長的列會消耗更多的內(nèi)存,因?yàn)镸ySql通常會按照指定的大小分配內(nèi)存。
  • BLOB與TEXT

    BLOB和TEXT都是為存儲很大數(shù)據(jù)而設(shè)計(jì)的字符串?dāng)?shù)據(jù)類型,分別采用二進(jìn)制和字符串方式存儲。與其他類型不同,MySql把每個BLOB和TEXT值當(dāng)做一個獨(dú)立的對象處理。存儲引擎在存儲時,通常會做特殊處理。比如當(dāng)BLOB和TEXT值太大,InnoDB會使用外部存儲區(qū)域來存儲,列只需要存儲1~4個字節(jié)的指針,指針指向外部存儲區(qū)域的值。

    • BLOB:分為TINYBLOB、BLOB、MEDIUMBLOB、LONGBLOB;沒有排序規(guī)則和字符集;
    • TEXT:分為TINYTEXT、TEXT、MEDIUMTEXT、LONGTEXT;有排序規(guī)則和字符集。

位類型

類型 空間 說明
BIT BIT(n),n <= 64,n位 取值范圍:0 ~ 2^n - 1

BIT(1)或者BIT,可以用來存儲java語言中的boolean類型,1/0代表true/false。

需要注意的是,如果存儲字符串,mysql會通過字符找到ASCII碼對應(yīng)的值存儲,例如:存儲一個字符串‘1’,得到的內(nèi)容是ASCII碼字符為‘1’對應(yīng)值為49。
UPDATE users SET d = '1' WHERE id = '4';

image

image

那假設(shè)存字符串‘11’呢?UPDATE users SET d = '11' WHERE id = '4';
image

按照剛剛的邏輯可以看到,‘1’字符對應(yīng)ASCII碼值=49,二進(jìn)制表示00110001;因此‘11’,二進(jìn)制表示00110001 00110001,等于十進(jìn)制的12593.

其他類型

BINARY、VARBINARY、ENUM、SET等

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容