mysql數(shù)據(jù)類型
[toc]
粗談
粗談這里不會(huì)做詳細(xì)介紹,僅僅是點(diǎn)到即止,具體詳細(xì)內(nèi)容在下面的細(xì)談里再做詳細(xì)介紹。如果不愿花太多時(shí)間,僅僅是想了解個(gè)大概可以看粗談。
mysql的數(shù)據(jù)類型可三大類:數(shù)值型、字符串型和日期時(shí)間型
數(shù)值型
分整數(shù)型和小數(shù)型(廢話~)
整數(shù)型:
tinyint、smallint、mediumint、int、bigint小數(shù)型:浮點(diǎn)型(
float、double)和定點(diǎn)型(decimal)
字符串型
mysql中的字符串類型有
char(定長(zhǎng)字符串)、varchar(可變長(zhǎng)字符串)、text(字符串文本)、blob(二進(jìn)制文本)、enum(枚舉)、set(集合)
日期時(shí)間型
mysql中的日期時(shí)間型有五種:
-
datetime(年月日時(shí)分秒) -
datestamp(時(shí)間戳) -
date(年月日) -
time(時(shí)分秒) -
year(年)
據(jù)說(shuō)不如php的時(shí)間戳強(qiáng)大~~
細(xì)談
數(shù)值型
整數(shù)型:
-
tinyint:占用1個(gè)字節(jié) -
smallint:占用2個(gè)字節(jié) -
mediumint:占用3個(gè)字節(jié) -
int:占用4個(gè)字節(jié) -
bigint:占用8個(gè)字節(jié)
一般的,tinyint與int較為常用
小數(shù)型:
相關(guān)用法:float(M,D) M表示總長(zhǎng)度,D表示小數(shù)點(diǎn)部分的長(zhǎng)度。
mysql>create table mytable(a float(10,2))charset utf8;
double和decimal與此類似;
- 浮點(diǎn)型:
-
float:占用4個(gè)字節(jié),最大有效位為7位左右。 -
double:占用8個(gè)字節(jié),最大有效位為15位左右。
- 定點(diǎn)型:
decimal
浮點(diǎn)型容易丟失精度。因此對(duì)精確度高的地方不用浮點(diǎn)型(比如與錢有關(guān)的地方),而是用定點(diǎn)型。
字符串型
char:固定長(zhǎng)度字符串。磁盤會(huì)分配固定長(zhǎng)度的空間去存儲(chǔ)數(shù)據(jù),如 數(shù)據(jù)不夠長(zhǎng)度,空間依然占用。
varchar:可變長(zhǎng)度字符串。會(huì)使用1~2個(gè)字節(jié)來(lái)保存實(shí)際長(zhǎng)度。
text:字符串文本??纱鎯?chǔ)64M字節(jié)數(shù)的文本,要使用10個(gè)字節(jié)來(lái)保存實(shí)際長(zhǎng)度。
blob:二進(jìn)制文本。
enum:枚舉。列出一系列的元素,可以在這些元素中任選一個(gè)作為元素的值(單選框)。使用2個(gè)字節(jié)來(lái)保存數(shù)據(jù),能夠保存65535個(gè)數(shù)據(jù),是因?yàn)槊杜e實(shí)際保存的是數(shù)值,而不是字符串本身。
set:集合。列出一系列的袁術(shù),可以在這些元素中選擇一個(gè)或多個(gè)作為元素的值(復(fù)選框)。集合使用8個(gè)字符保存數(shù)據(jù),和枚舉一樣保存的是數(shù)值,集合定義的數(shù)據(jù)類型里面出現(xiàn)的元素最多個(gè)數(shù)為64個(gè)。
證明enum和set保存的是數(shù)值:
create database mydatabase; -- 創(chuàng)建一個(gè)mydatabase數(shù)據(jù)庫(kù)
mysql> use mydatabase; -- 進(jìn)入mydatabase數(shù)據(jù)庫(kù)中
-- 創(chuàng)建一個(gè)mytable表
create table mytable(
animal enum('貓','狗','豬') -- enum類型animal列
)charset utf8;
insert into mytable values('狗'); -- 插入數(shù)據(jù)
select animal + 0 from mytable; -- 用數(shù)學(xué)運(yùn)算講其顯示。
其他:
char與varchar的使用:
- 所有字符串長(zhǎng)度必須小于255
- 如果字符串長(zhǎng)度固定,那么使用char;否則使用varchar
- char效率高,varchar節(jié)省空間
enum和set都保存的是數(shù)值而不是字符串,因此較為節(jié)省空間。插入時(shí)也能夠使用數(shù)值插入。
日期時(shí)間型
-
datatime:表示年月日 時(shí)分秒,占用8個(gè)字節(jié)。 -
datastamp:時(shí)間戳,使用標(biāo)準(zhǔn)整型存儲(chǔ),實(shí)際卻是年月日 時(shí)分秒,占用4個(gè)字節(jié)。 -
data:表示年月日,占用3個(gè)字節(jié)。 -
time:時(shí)間部分,表示一個(gè)時(shí)間段,占用3個(gè)字節(jié)。 -
year:年,占用1個(gè)字節(jié)。
附:在mysql中,任意一條記錄,所有字段的集合的長(zhǎng)度不超過(guò)65535個(gè)字節(jié)。所有的字段沒(méi)有全部不允許null,那么null會(huì)占用一個(gè)字節(jié)來(lái)保存。