數(shù)值類型
整數(shù)類型 | 字節(jié) | 最小值 | 最大值 |
---|---|---|---|
tinyint | 1 | 有符號(hào) -128 (-27) 無(wú)符號(hào) 0 |
有符號(hào) 127 (27-1) 無(wú)符號(hào) 255 (28-1) |
smallint | 2 | 有符號(hào) -32768 (-215) 無(wú)符號(hào) 0 |
有符號(hào) 32767 (215-1) 無(wú)符號(hào) 65535 (216-1) |
mediumint | 3 | 有符號(hào) (-223) 無(wú)符號(hào) 0 |
有符號(hào) (223-1) 無(wú)符號(hào) (224-1) |
int integer |
4 | 有符號(hào) (-231) 無(wú)符號(hào) 0 |
有符號(hào) (231-1) 無(wú)符號(hào) (232-1) |
bigint | 8 | 有符號(hào) (-263) 無(wú)符號(hào) 0 |
有符號(hào) (263-1) 無(wú)符號(hào) (264-1) |
浮點(diǎn)數(shù)類型 | 字節(jié) | 最小值 | 最大值 |
---|---|---|---|
float | 4 | ±1.175494351E-38 | ±3.402823466E+38 |
double | 8 | ±2.2250738585072014E-308 | ±1.797693134862315i7E+308 |
定點(diǎn)數(shù)類型 | 字節(jié) | 描述 |
---|---|---|
dec(m,d) decimal(m,d) |
m + 2 | 最大取值范圍與 double 相同种蘸,給定 decimal 的有效取值范圍由 m 和 d 決定 |
位類型 | 字節(jié) | 最小值 | 最大值 |
---|---|---|---|
bit(m) | 1 ~ 8 | bit(1) | bit(64) |
-
對(duì)于整型數(shù)據(jù),MySQL 支持在類型名稱后面的小括號(hào)內(nèi)指定顯示寬度媚创,例如
int(5)
表示當(dāng)數(shù)值寬度小于 5 位的時(shí)候在數(shù)字前面填滿寬度渗钉,如果不顯示指定寬度則默認(rèn)為int(11)
。
一般配合zerofill
使用钞钙,顧名思義鳄橘,zerofill
就是用 “0” 填充的意思,也就是在數(shù)字位數(shù)不夠的空間用字符 “0” 填滿create table tn (cn int zerofill)
所有的整數(shù)類型都有一個(gè)可選屬性
UNSIGNED
(無(wú)符號(hào))芒炼,如果需要在字段里面保存非負(fù)數(shù)或者需要較大的上限值時(shí)瘫怜,可以用此選項(xiàng),它的取值范圍是正常值的下限取 0本刽,上限取原值的 2 倍鲸湃。如果一個(gè)列指定為zerofill
,則 MySQL 自動(dòng)為該列添加UNSIGNED
屬性-
整數(shù)類型還有一個(gè)屬性:
AUTO_INCREMENT
子寓。在需要產(chǎn)生唯一標(biāo)識(shí)符或順序值時(shí)暗挑,可利用此屬性,這個(gè)屬性只用于整數(shù)類型别瞭。AUTO_INCREMENT
值一般從 1 開始窿祥,每行增加 1。在插入 NULL 到一個(gè)AUTO_INCREMENT
列時(shí)蝙寨,MySQL 插入一個(gè)比該列中當(dāng)前最大值大 1 的值晒衩。一個(gè)表中最多只能有一個(gè)AUTO_INCREMENT
列。對(duì)于任何想要使用AUTO_INCREMENT
的列墙歪,應(yīng)該定義為NOT NULL
听系,并定義為PRIMARY KEY
或定義為UNIQUE
鍵create table tn (cn int auto_increment not null primary key)
-
對(duì)于小數(shù)的表示,MySQL 分為兩種方式:浮點(diǎn)數(shù)和定點(diǎn)數(shù)虹菲。定點(diǎn)數(shù)在 MySQL 內(nèi)部以字符串形式存放靠胜,比浮點(diǎn)數(shù)更精確,適合用來(lái)表示貨幣等精度高的數(shù)據(jù)浮點(diǎn)數(shù)和定點(diǎn)數(shù)都可以用類型名稱后加 “( M, D)” 的方式來(lái)進(jìn)行表示毕源,“( M, D)” 表示該值一共顯示 M 位數(shù)字(整數(shù)位+小數(shù)位)浪漠,其中 D 位位于小數(shù)點(diǎn)后面, M 和 D 又稱為精度和標(biāo)度霎褐。float 和 double 在不指定精度時(shí)址愿,默認(rèn)會(huì)按照實(shí)際的精度(由實(shí)際的硬件和操作系統(tǒng)決定)來(lái)顯示,而 decimal 在不指定精度時(shí)冻璃,默認(rèn)的整數(shù)位為 10响谓,默認(rèn)的小數(shù)位為 0
alter table tn add cn float(5,2)
-
對(duì)于
BIT(位)
類型损合,用于存放位字段值,BIT(M)
可以用來(lái)存放多位二進(jìn)制數(shù)娘纷,M 范圍從 1~64嫁审,如果不寫則默認(rèn)為 1 位。對(duì)于位字段赖晶,直接使用SELECT
命令將不會(huì)看到結(jié)果律适,可以用bin()
(顯示為二進(jìn)制格式)或者hex()
(顯示為十六進(jìn)制格式)函數(shù)進(jìn)行讀取。數(shù)據(jù)插入 bit 類型字段時(shí)嬉探,首先轉(zhuǎn)換為二進(jìn)制擦耀,如果位數(shù)允許,將成功插入涩堤;如果位數(shù)小于實(shí)際定義的位數(shù)眷蜓,則插入失敗alter table tn add cn bit(2) insert into tn (cn) values(1) select bin(cn) from tn
日期時(shí)間類型
類型 | 字節(jié) | 范圍 | 格式 | 用途 |
---|---|---|---|---|
DATE | 3 | 1000-01-01 ~ 9999-12-31 | YYYY-MM-DD | 日期值 |
TIME | 3 | -838:59:59 ~ 838:59:59 | HH:MM:SS | 時(shí)間值 |
YEAR | 1 | 1901 ~ 2155 | YYYY | 年份值 |
DATETIME | 8 | 1000-01-01 00:00:00 ~ 9999-12-31 23:59:59 | YYYY-MM-DD HH:MM:SS | 混合日期和時(shí)間值 |
TIMESTAMP | 4 | 19700101080001~ 2038 年某時(shí) | YYYYMMDD HHMMSS | 混合日期和時(shí)間值,時(shí)間戳 |
- 用
now()
函數(shù)插入當(dāng)前日期:insert into tablename values(now())
- 第一個(gè) timestamp 會(huì)被系統(tǒng)自動(dòng)創(chuàng)建默認(rèn)值
current_timestamp
- timestamp 還有一個(gè)重要特點(diǎn)胎围,就是和時(shí)區(qū)相關(guān)吁系。當(dāng)插入日期時(shí),會(huì)先轉(zhuǎn)換為本地時(shí)區(qū)后存放白魂;而從數(shù)據(jù)庫(kù)里面取出時(shí)汽纤,也同樣需要將日期轉(zhuǎn)換為本地時(shí)區(qū)后顯示
字符串類型
類型 | 字節(jié) | 用途 |
---|---|---|
CHAR(M) | M 為 0 - 255 | 固定長(zhǎng)度的字符串 |
VARCHAR(M) | M 為 0 - 65535 | 可變長(zhǎng)度的字符串 |
TINYBLOB | 0 - 255 | 不超過 255 個(gè)字符的二進(jìn)制字符串 |
BLOB | 0 - 65535 | 二進(jìn)制形式的長(zhǎng)文本數(shù)據(jù) |
MEDIUMBLOB | 0 - 167772150 | 二進(jìn)制形式的中等長(zhǎng)度文本數(shù)據(jù) |
LONGBLOB | 0 - 4294967295 | 二進(jìn)制形式的極大文本數(shù)據(jù) |
TINYTEXT | 0 - 255 | 短文本字符串 |
TEXT | 0 - 65535 | 長(zhǎng)文本數(shù)據(jù) |
MEDIUMTEXT | 0 - 167772150 | 中等長(zhǎng)度文本數(shù)據(jù) |
LONGTEXT | 0 - 4294967295 | 極大文本數(shù)據(jù) |
VARBINARY(M) | 0 - M | 可變的二進(jìn)制字符串 |
BINARY(M) | 0 - M | 二進(jìn)制字符串 |
ENUM | ||
SET |
在檢索的時(shí)候,CHAR 刪除了尾部的空格福荸,而 VARCHAR 則保留這些空格
保存 BINARY 值時(shí)蕴坪,在值的最后通過填充 “0x00”(零字節(jié))以達(dá)到指定的字段定義長(zhǎng)度
-
ENUM 中文名稱叫枚舉類型,它的值范圍需要在創(chuàng)建表時(shí)通過枚舉方式顯式指定敬锐,對(duì) 1~255 個(gè)成員的枚舉需要 1 個(gè)字節(jié)存儲(chǔ)背传;對(duì)于 255~65535 個(gè)成員,需要 2 個(gè)字節(jié)存儲(chǔ)台夺。最多允許有 65535 個(gè)成員径玖。忽略大小寫。只允許從值集合中選取單個(gè)值颤介,而不能一次取多個(gè)值
create table tn (n1 enum('A','B','C')); insert into tn values('a'),('B'),('C'),('D');// a 會(huì)被轉(zhuǎn)換成 A梳星,D 轉(zhuǎn)換為空字符串
-
Set 和 ENUM 類型非常類似,也是一個(gè)字符串對(duì)象滚朵,里面可以包含 0~64 個(gè)成員冤灾。根據(jù)成員的不同,存儲(chǔ)上也有所不同辕近。Set 和 ENUM 除了存儲(chǔ)之外韵吨,最主要的區(qū)別在于 Set 類型一次可以選取多個(gè)成員,而 ENUM 則只能選一個(gè)亏推。區(qū)分大小寫
1~8 成員的集合学赛,占 1 個(gè)字節(jié)
9~16 成員的集合,占 2 個(gè)字節(jié)
17~24 成員的集合吞杭,占 3 個(gè)字節(jié)
25~32 成員的集合盏浇,占 4 個(gè)字節(jié)
33~64 成員的集合,占 8 個(gè)字節(jié)
create table tn (n1 set('A','B','C')); insert into tn values('A,B'),('A,C,A');// 重復(fù)成員的集合只取一次