三大數據類型:數值,時間日期,字符串。 算法
是否有符號sql
create table tab_int( a tinyint unsigned, b tinyint, c SMALLINT, d MEDIUMINT, e INT, f bigint );
insert into tab_int values(255,-128,2423,-4323,-14432,4356546);
select * from tab_int;
定義數據的顯示寬度
經過規定數據的顯示寬度,達到統一的顯示目的。
類型(m),m表示顯示的最少寬度是多少。markdown
增長字段
alter table tab_int add g tinyint(3);
insert into tab_int values(255,-128,2423,-4323,-14432,4356546,123);
須要使用前導零填充達到目的,稱之爲zerofill。ide
alter table tab_int add h int(3) zerofill;
insert into tab_int values(255,-128,2423,-4323,-14432,4356546,123,2);
insert into tab_int values(255,-128,2423,-4323,-14432,4356546,123,1232);
insert into tab_int values(255,-128,2423,-4323,-14432,4356546,123,543);
注意:
一、不影響數的範圍。
二、寬度大的不會受到影響,不會被截取。大數據
也存在布爾bool類型,可是就是tinyint(1)的別名。atom
單精度 默認是6位左右
雙精度 默認是16位左右spa
create table num( a float, b double );
insert into num values(1234567890.0123456789,1234567890.0123456789);
select * from num;
支持控制數值的範圍
Type(M,D)
M表示全部數值位數(不包括小數點和符號)
D表示容許的小數位數code
create table num_1( a float(5,2), b double(8,3) );
insert into num_1 values(123.01,12345.012);
select * from num_1;
不合法blog
insert into num_1 values(1234567890.0123456789,1234567890.0123456789);
insert into num_1 values(12.301,12345.012);
支持科學計算法ci
insert into num_1 values(0.23E3,456.7E2);
select * from num_1;
decimal(M,D)
M總位數
D小數位數
create table num_2( send_money decimal(10,2) );
insert into num_2 values( 1234.56);
select * from num_2;
多出來的位數會四捨五入
insert into num_2 values( 1234.567);
支持填充
alter table num_2 add money decimal(10,2) zerofill;
insert into num_2 values( 1234.567,1234.3234);
支持無符號
年月日時分秒 datetime 八個字節
時間戳 timestamp 存儲時,整型;可是表示時,日期時間。 四個字節
年月日 data
create table datetime1( a datetime, b timestamp );
insert into datetime1 values('2015-04-16 11:50:21','2015-04-16 11:50:33');
select * from datetime1;
檢索列時,+0能夠檢索時間
select a,b+0 from datetime1;
支持任意格式的分隔符
insert into datetime1 values('20380119031422','20380119031422');
select a,b+0 from datetime1;
可是若是出現歧義,不建議使用特殊的分隔符,會致使邏輯不清晰。
insert into datetime1 values('20:01:19','2038-01-19 03:14:08');
支持0值
insert into datetime1 values(0,0);
表示當前是沒有規定的
2013-04-0表示4月整個月。(邏輯想法)
insert into datetime1 values('2013-04-0','2038-01-19 03:14:08');
表示意義:
一、一天中的時間
二、表示時間間隔,在表示間隔時,可使用天來表示
格式: D HH:MM:ss
create table t_1( age time );
insert into t_1 values('23:12:11');
insert into t_1 values('231211');
insert into t_1 values('5 23:12:11');
select * from t_1;
char(M) 固定長度
M表示嚴格限定的長度。
varchar(M) 可變長度
M表示容許的字符串長度。
char(5) varchar(5)
'' 5個字符 1個字符
'abc' 5個字符 4個字符
'abcde' 5個字符 6個字符
varchar須要一個字節保存字符串的總長度。
M表示字符數而不是字節數。
可是總的長度是按照字節計算。char最大255個字節。
例如以下會報錯。
create table s_1( a varchar(65535) ) character set utf8;
create table s_2( a varchar(65535) ) character set gbk;
注意:
字段的最大長度,除了類型自己的限制以外,記錄的總長度也有限制。
真實的varchar的長度:總長度65535
varchar特色:
當類型數據超過255時,採用2個字節表示長度。
65535-2=65533
整條記錄,須要一個額外的字節,用於保存當前字段的null值。所以,只有65532
若是有設置爲not null,則能夠有65533個字節。
create table s_3( a varchar(65531), b tinyint )character set latin1;
create table s_4( a varchar(65532) not null, b tinyint not null )character set latin1;
除非全部的字段都不是null,這個字節才能夠省略。一個記錄,不管有多少個字段存在null,都是使用統一的一個字節來表示。而不是每一個字段一個字節。
text(文本)
text有不少類型。 tinytext,longtext表示字符串長度不同。
create table s_5( a text, b text )character set latin1;
enum
看上去是字符串,內部存儲整型表示字段值,只能是某一個。最保存65536個枚舉項。
create table s_6( gender enum('female','male') );
insert into s_6 values('male');
select gender+0 from s_6;
Set
8個字節,最多表示64個狀態,一個狀態一個位。
1 10 100
drop table s_7;
create table s_7( hobby set('basket','football','pingpang') );
insert into s_7 values('basket,football');
insert into s_7 values('football,pingpang');
select hobby from s_7;
select hobby+0 from s_7;
一、應該使用最精確的類型。佔用的空間少。 二、還應該考慮到相關應用語言的處理。例如經常將時間日期保存成一個整型,便於計算。 三、考慮移植的兼容性。