數(shù)值類型
注: mysql不區(qū)分大小寫
當(dāng)定義數(shù)據(jù)類型后 ,插入的 數(shù)據(jù)需要遵循數(shù)據(jù)類型的約束。
創(chuàng)建一個(gè)有符號(hào)的數(shù)據(jù)類型 :
create table t1 (num int );
創(chuàng)建一個(gè)無(wú)符號(hào)的數(shù)據(jù)類型:
create table t2 (num int unsigned);
在添加數(shù)據(jù)時(shí),如果超出數(shù)據(jù)類型所允許的范圍,mysql服務(wù)會(huì)攔截命令語(yǔ)句。
bit 類型
bit[(M)] : 位字段類型。M表示每個(gè)值的位數(shù),范圍從1到64。如果M被忽略,默認(rèn)為1。
create table tt4 ( id int, a bit(8));
insert into tt4 values(10, 10);
查看表,我們發(fā)現(xiàn),a的數(shù)據(jù)10沒有出現(xiàn)。
再次插入,
insert into tt4 values(65,65);
查看
發(fā)現(xiàn)a位置的65 變?yōu)榱?‘A’,我們可知:
bit字段在顯示時(shí),是按照ASCII碼對(duì)應(yīng)的值顯示
同時(shí),bit類型插入數(shù)值時(shí)也受其本身大小約束。
小數(shù)類型
float
float[(m, d)] [unsigned] : M指定顯示長(zhǎng)度,d指定小數(shù)位數(shù),占用空間4個(gè)字節(jié)
小數(shù):float(4,2)表示的范圍是-99.99 ~ 99.99,MySQL在保存值時(shí)會(huì)進(jìn)行四舍五入。
操作:
create table t2(id int,num float(4,2));
insert into t2 values(1,99.99);
insert into t2(id,num) values(2,-99.99);
insert into t2 values(2,99.994);
查看:
插入99.996 等數(shù)字時(shí),ERROR 1264 (22003): Out of range value
,mysql會(huì)約束你。
decimal
decimal(m, d) [unsigned] : 定點(diǎn)數(shù)m指定長(zhǎng)度,d表示小數(shù)點(diǎn)的位數(shù)
deciaml 和float 很像,但是有區(qū)別,它們的精度不一樣。
decimal的精度更準(zhǔn)確,因此如果我們希望某個(gè)數(shù)據(jù)表示高精度,選擇decimal
字符串類型
char
char(L): 固定長(zhǎng)度字符串,L是可以存儲(chǔ)的長(zhǎng)度,單位為字符,最大長(zhǎng)度值可以為255
注意: char的單位是字符,不是字節(jié),一個(gè)字符可以表示任意一個(gè)在字符集里的字符,
一個(gè)漢字和一個(gè)英文字母都表示為一個(gè)字符
char(2) 表示可以存放兩個(gè)字符。
varchar
varchar(L): 可變長(zhǎng)度字符串,L表示字符長(zhǎng)度,最大長(zhǎng)度65535個(gè)字節(jié)
varchar的L表示的是字節(jié)數(shù)。所以,varchar的最大長(zhǎng)度和編碼字符集有關(guān)系。
- varchar長(zhǎng)度可以指定為0到65535之間的值,但是有1 - 3 個(gè)字節(jié)用于記錄數(shù)據(jù)大小,所以說(shuō)有效字節(jié)數(shù)是65532。
- 當(dāng)我們的表的編碼是utf8時(shí),varchar(n)的參數(shù)n最大值是65532/3=21844[因?yàn)閡tf中,一個(gè)字符占用3個(gè)字節(jié)],如果編碼是gbk,varchar(n)的參數(shù)n最大是65532/2=32766(因?yàn)間bk中,一個(gè)字符占用2字節(jié))
但是,我們看報(bào)錯(cuò):
row size too large,說(shuō)明65535字節(jié)是表一行的最大長(zhǎng)度,因此受表中定義的其它數(shù)據(jù)影響,達(dá)不到其最大長(zhǎng)度。
varchar 的可變體現(xiàn)在,當(dāng)設(shè)置了L長(zhǎng)度后,插入的數(shù)據(jù)占據(jù)內(nèi)存的大小等于數(shù)據(jù)的實(shí)際大小而不是你設(shè)置的規(guī)定的L,而char插入的大小就是設(shè)置的大小;
日期和時(shí)間類型
date :日期 ‘yyyy-mm-dd’ ,占用三字節(jié)
datetime 時(shí)間日期格式 'yyyy-mm-dd HH:ii:ss’表示范圍從 1000 到 9999 ,占用八字節(jié)
timestamp :時(shí)間戳,從1970年開始的 yyyy-mm-dd HH:ii:ss格式和 datetime 完全一致,占用 四字節(jié)
data 和datatime 都是固定的。
添加數(shù)據(jù)時(shí),時(shí)間戳(timestamp)自動(dòng)添加當(dāng)前時(shí)間,修改數(shù)據(jù)時(shí),時(shí)間戳也會(huì)自動(dòng)修改為當(dāng)前時(shí)間。
enum和set
enum:枚舉,“單選”類型;
enum(‘選項(xiàng)1’,‘選項(xiàng)2’,‘選項(xiàng)3’,…);
該設(shè)定只是提供了若干個(gè)選項(xiàng)的值,最終一個(gè)單元格中,實(shí)際只存儲(chǔ)了其中一個(gè)值;而且出于效率考慮,這些值實(shí)際存儲(chǔ)的是“數(shù)字”, 值依次對(duì)應(yīng)如下數(shù)字:1,2,3,…
set:集合,“多選”類型;
set(‘選項(xiàng)值1’,‘選項(xiàng)值2’,‘選項(xiàng)值3’, …);
create table t5(
-> name varchar(20),
-> sex enum('男','女'),
-> hobby set('學(xué)習(xí)','游戲','爬山','代碼','戀愛')
-> );
創(chuàng)建表結(jié)構(gòu),
正常插入 :
insert into t5 values('張三','男','學(xué)習(xí)');
insert into t5 values('李四','女','游戲');
insert into t5 values('王五','男','游戲,爬山');
數(shù)字插入:
insert into t5 values('趙六',2,0);
insert into t5 values('趙六',2,1);
insert into t5 values('趙六',2,2);
insert into t5 values('趙六',1,4);
insert into t5 values('趙六',1,7);
insert into t5 values('趙六',1,31);
可知,enum的下標(biāo)從1開始,一一對(duì)應(yīng)。
set的數(shù)字表示的是一個(gè)位圖結(jié)構(gòu),當(dāng)為0時(shí),插入為空,當(dāng)為31時(shí),二進(jìn)制表示為11111,所以選的是位圖的前五個(gè)選項(xiàng)。
集合查詢使用find_ in_ set函數(shù):
查上表中愛好有學(xué)習(xí)的人的信息:
select * from t5 where find_in_set('學(xué)習(xí)',hobby);
查表中愛好只有學(xué)習(xí)的人:文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-764972.html
select * from t5 where hobby='學(xué)習(xí)';
文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-764972.html
到了這里,關(guān)于【MySQL】MySQL數(shù)據(jù)類型的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!