1、MySQL數據類型
·整型:
tinyint、INT、smallint、mediumint、bigint
int(21)和int(11)本質是無區別的,只有在補零顯示是有區別
create table t(a int(11) zerofill,b int(21) zerofill);
#zerofill表示補零
insert into t values(1,1);
select * from t;
·浮點型 ? ?
FLOAT(M,D) 單精度, DOUBLE(M,D)雙精度,double類型精度高于float,但是都會造成精度丟失,如:
create table t (id int,a float(7,4),b double(6,4));
insert into t (id ,a,b) values(1,123.12345,78.876598);
select * from t where id=1;
查詢結果如下
出現了四舍五入,精度丟失的情況,如果數據是和money有關的話,就有意思了
decimal ?高精度數據類型,decimal(M,N) M為總精度,N為小數點位數,1<M<254,0<N<60,存儲空間變長,
經驗總結
? ? ·存儲性別、省份、類型等分類信息時優先使用tinyint、enum
? ? ?·BIGINT存儲空間更大,int和bigint之間通常使用bigint
? ? ? ·交易等高精度數據時選擇decimal
·字符串型
char、varchar、text、blog、binary
char與varchar
? ? ·char和varchar的存儲單位都是字符
? ? ?字符與字節的區別
字節是計算機中表示數據的存儲單位,字符是一個符號,
char 存儲定長,容易造成空間的浪費
varchar存儲變長,可以節省存儲空間,用多少存多少
text與char、varchar的區別
·char和varchar的存儲單位為字符
·text存儲單位為字節,總大小為65535字節,約為64kb
·char數據類型最大為255字符
·varchar數據類型為變長存儲,可以存儲超過255字符
·text在數據庫內部大多存儲為溢出頁,效率不如char
blog、binary存儲圖片音頻,如頭像,
雖然可以,但是非常不推薦
經驗總結
·char與varchar定義的長度是字符長度不是字節長度
·存儲字符串推薦選擇使用varchar
·雖然數據庫可以存儲二進制數據,但性能低下,不要使用數據庫存儲文件音頻等二進制數據
·日期型
date、dateTime、Timestamp、Time、Year
時間類型的區別
·存儲空間的區別
date三字節,如:2015-05-01
time三字節,如: ? 11:12:00
TimeStamp四字節,如:2015-05-01 ?11:12:00
DateTime 八字節,如:2015-05-01? 11:12:00
·存儲精度的區別
Date精確到年月日
Time精確到小時分鐘秒
timestamp、DateTime都包含上述兩者
timestamp與DateTime區別
timestamp存儲范圍:1970-01-01 00:00:01 to 2038-01-19 03:14:07
DateTime存儲范圍:1000-01-01 00:00:00 to 9999-12-31 23:59:59
字段類型和時區的關系
timestamp會根據系統時區進行轉變,datetime不會
國際化系統使用timestamp,如:
create table t (a_datetime datetime,b_timestamp timestamp);
#插入當前系統時間
insert into t values(now(),now());
select * from t;
#重置系統時間
set time_zone= '+00:00';
select * from t;
#結果顯示timestamp類型的時間隨著時區改變而改變,
#改回系統時間
set time_zone='+08:00';
bigint 也可以存儲時間類型
bigint存儲時間時,需要應用程序,將時間轉為數字
經驗總結
date和Time類型精度交差
bigint類型一樣可以存儲時間
數據類型選擇,按需選擇
·其他數據類型:BINARY、VARBINARY、ENUM、SET、