纵有疾风起
人生不言弃

Mysql列数据类型

三大数据类型:数值,时间日期,字符串。
Mysql列数据类型插图

数值

整数

Mysql列数据类型插图1
是否有符号

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

Mysql列数据类型插图2

注意:
1、不影响数的范围。
2、宽度大的不会受到影响,不会被截取。

也存在布尔bool类型,但是就是tinyint(1)的别名。

小数

Mysql列数据类型插图3

浮点数

单精度 默认是6位左右
双精度 默认是16位左右

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

Mysql列数据类型插图4

支持控制数值的范围
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);

Mysql列数据类型插图5

支持科学计算法

insert into num_1 values(0.23E3,456.7E2);
select * from num_1;

Mysql列数据类型插图6

定点数(保证不会精度丢失)

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

Mysql列数据类型插图7

支持填充

alter table num_2 add money decimal(10,2) zerofill;
insert into num_2 values( 1234.567,1234.3234);

Mysql列数据类型插图8

支持无符号

日期时间类型

Mysql列数据类型插图9

datetime类型

年月日时分秒 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;

Mysql列数据类型插图10

支持任意格式的分隔符

insert into datetime1 values('20380119031422','20380119031422');
select a,b+0 from datetime1;

Mysql列数据类型插图11
但是如果出现歧义,不建议使用特殊的分隔符,会导致逻辑不清晰。

insert into datetime1 values('20:01:19','2038-01-19 03:14:08');

Mysql列数据类型插图12

支持0值

insert into datetime1 values(0,0);

Mysql列数据类型插图13

表示当前是没有规定的
2013-04-0表示4月整个月。(逻辑想法)

insert into datetime1 values('2013-04-0','2038-01-19 03:14:08');

Mysql列数据类型插图14

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;

Mysql列数据类型插图15

字符串类型

Mysql列数据类型插图16
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;

Mysql列数据类型插图17
注意:
字段的最大长度,除了类型本身的限制之外,记录的总长度也有限制。
真实的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;

Mysql列数据类型插图18

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;

Mysql列数据类型插图19

如何选择列类型?

1、应该使用最精确的类型。占用的空间少。
2、还应该考虑到相关应用语言的处理。例如常常将时间日期保存成一个整型,便于计算。
3、考虑移植的兼容性。

原文链接:https://blog.csdn.net/scgaliguodong123_/article/details/47177527

本站声明:网站内容来源于网络,如有侵权,请联系我们,我们将及时处理。

未经允许不得转载:起风网 » Mysql列数据类型
分享到: 生成海报

评论 抢沙发

评论前必须登录!

立即登录