程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> Mysql列數據類型

Mysql列數據類型

編輯:MySQL綜合教程

Mysql列數據類型


三大數據類型:數值,時間日期,字符串。
\

數值

整數

\
是否有符號<喎?http://www.Bkjia.com/kf/ware/vc/" target="_blank" class="keylink">vc3Ryb25nPjwvcD4NCjxwcmUgY2xhc3M9"brush: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表示顯示的最少寬度是多少。

增加字段
alter table tab_int add g tinyint(3);
insert into tab_int values(255,-128,2423,-4323,-14432,4356546,123);

需要使用前導零填充達到目的,稱之為zerofill。

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);

\

注意:
1、不影響數的范圍。
2、寬度大的不會受到影響,不會被截取。

也存在布爾bool類型,但是就是tinyint(1)的別名。

小數

\

浮點數

單精度 默認是6位左右
雙精度 默認是16位左右

create table num(
a float,
b double
);
insert into num values(1234567890.0123456789,1234567890.0123456789);
select * from num;

\

支持控制數值的范圍
Type(M,D)
M表示所有數值位數(不包括小數點和符號)
D表示允許的小數位數

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;

不合法

insert into num_1 values(1234567890.0123456789,1234567890.0123456789);
insert into num_1 values(12.301,12345.012);

\

支持科學計算法

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類型

年月日時分秒 datetime 八個字節
時間戳 timestamp 存儲時,整型;但是表示時,日期時間。 四個字節
年月日 dat

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');

\

Time類型

表示意義:
1、一天中的時間
2、表示時間間隔,在表示間隔時,可以使用天來表示
格式: 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;

\

如何選擇列類型?

1、應該使用最精確的類型。占用的空間少。
2、還應該考慮到相關應用語言的處理。例如常常將時間日期保存成一個整型,便於計算。
3、考慮移植的兼容性。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved