mysql支持的数据三大类型、描述、详细说明

2 篇文章 0 订阅
1 篇文章 0 订阅

mysql支持的数据三大类型:

1.数值类型 2.整数类型 3.定点数类型

数值描述:

整数类型
字节 范围(有符号) 范围(无符号)
TINYINT 1 -128,127 0,255
SMALLINT 2 -32768,32767 0,65535
MEDIUMINT 3 -8388608,8388607 0,1677215
INT、INTEGER 4 -2147483648,2147483647 0,4294967295
BIGINT 8 -9223372036854775808,9223372036854775807 0,18446744073709551615

定点数类型
DECIMAL(M,D) 占M+2个字节


数据库类型的详细说明:

数值类型详细说明:
1>在整数类型中,按照取值范围和存储方式不同,分为tinyint、smallint、mediumint、int和bigint这5个类型。如果超出类型范围的操作
会发生“Out of range”错误提示。为了避免此类问题发生,在选择数据类型时要根据应用的实际情况确定其取值范围,最后根据确定的结果
慎重选择数据类型

2>对于整形数据,MySQL还支持在类型名称后面的小括号内指定显示宽度,例如int(5)表示当数值宽度小于5位的时候在数字前面填满宽度,如
果不显示指定宽度则默认为int(11)。一般配合zerofill使用,顾名思义,zerofill就是用"0"填充的意思。设置了宽度限制后,如果插入大于宽度
限制的值,并不会有任何影响,还是按照类型的实际精度进行保存,这是,宽度格式实际已经没有意义,左边不会再填充任何的“0”字符。
create table t1(id1 int,id2 int(5));
insert into t1 values(1,1);
select * from t1;
alter table t1 modify id1 int zerofill;
alter table t1 modify id2 int(5) zerofill;
select * from t1;
insert into t1 values(1,111111);
select * from t1;

3>所有的整数类型都有一个可选属性UNSIGNED(无符号),如果需要在字段里面保存非负数或者需要较大的上限值时,可以用此选项,它的取
值范围是正常值的下限取0,上限取原值的2倍。如果一个列指定为zerofill,则MySQL自动为该列添加UNSIGNED属性。

4>整数类型还有一个属性:AUTO_INCREMENT。在需要产生唯一标识符或顺序值时,可利用此属性,这个属性只能用于整数类型。
AUTO_INCREMENT值一般从1开始,每行增加1。在插入NULL到一个AUTO_INCREMENT列时,MySQL插入一个比该列中当前最大值大1的值。
一个表中最多只能有一个AUTO_INCREMENT列。对于AUTO_INCREMENT列,应该定义为NOT NULL,并且定义为PRIMARY KEY或定义为UNIQUE键
比如:
create table t1(id int auto_increment not null primary key);或者:
create table t1(id int auto_increment not null,primary key(id));或者:
create table t1(id int auto_increment not null,unique(id));

5>对于小数的表示,MySQL分为两种方式:浮点数和定点数。浮点数包括float(单精度)和double(双精度),而定点数则只有decimal一种
表示。定点数在MySQL内部以字符串形式存放,比浮点数更精确,适合用来表示货币等精度高的数据。
浮点数和定点数都可以用类型名称后面加(M,D)的方式来进行表示,(M,D)表示该值一共显示M位数字(整数位+小数位),其中D位位于小数
点后面,M和D又称为精度和标度。
对于浮点数,如果有精度和标度则MySQL保存值时会进行四舍五入,系统不会报错。
对于定点数,不指定精度和标度的情况下会默认为decimal(10,0)来进行操作,并且如果数据超越了精度和标度值,系统会报错。对于
warning信息可以通过show warnings;查看!
create table t1(price decimal(5,2) default NULL);

2.日期类型
日期和时间类型 字节 最小值 最大值
DATE 4 1000-01-01 9999-12-31
DATETIME 8 1000-01-01 00:00:00 9999-12-31 23:59:59
TIMESTAMP 4 19700101080001 2038年的某个时刻
TIME 3 -838:59:59 838:59:59
YEAR 1 1901 2155
DATETIME是常用的日期类型
create table t1(dt datetime);
insert into t1 values(now());

3.字符串类型
字符串类型 描述
CHAR(M) M为0~255之间的整数,表示可以存M个字符
VARCHAR(M) M为0~65535之间的整数,表示可以存M个字符
TINYTEXT 允许长度0~255字符
TEXT 允许长度0~65535字符
MEDIUMTEXT 允许长度0~167772150字符
LONGTEXT 允许长度0~42949667295字符

BINARY(M)				允许长度0~M个字节的定长字节字符串(类似于CHAR类型,但保存二进制字节字符串而
			        		                       不是非二进制字符串)
VARBINARY(M)			允许长度0~M个字节的变长字节字符串类型类似于VARCHAR类型,但保存二进制字节字				         		                       符串而不是非二进制字符串。
TINYBLOB				允许长度0~255字节的BLOB列(保存二进制字节字符串)
BLOB				允许长度0~65535字节的BLOB列(保存二进制字节字符串)
MEDIUMBLOB			允许长度0~167772150字节的BLOB列(保存二进制字节字符串)
LONGBLOB				允许长度0~4294967295字节的BLOB列(保存二进制字节字符串)

ENUM				枚举类型
SET				SET类型
字符串类型详细说明:     
1)char和varchar类型
    char与varchar很类似,都用来保存MySQL中较短字符串。
    区别:char列的长度固定位创建表时声明的长度,长度可以为0~255的任何值;
                 varchar列中的值为可变长字符串,长度可以指定为0~65535(MySQL5.0.3版本以前为0~255)之间的值。
                 在检索时,char列删除尾部的空格,而varchar则保留这些空格。
    create table t1(v varchar(4),c char(4));
    insert into t1 values('ab  ','ab  ');
    select length(v),length(c) from t1;
    select concat(v,'+'),concat(c,'+') from vc;
    选择:由于char是固定长度,所以它的处理速度比varchar快,但是缺点是浪费存储空间。所以对于那些长度变化不大的数据可以选择此列
    
2)text类型
    保存少量字符串的时候,我们会选择char或者varchar,保存大文本的时候通常会选择使用text。
    
3)blob类型
    blob类型也是用来保存比较大量的字符串的名单是blob类型是用来保存二进制数据的比如照片。
    
2)ENUM类型
    枚举类型,它的值范围需要在创建表时通过枚举方式显式指定,对1~255个成员的枚举需要1个字节存储;对于255~65535个成员,需要2个
    字节存储。最多有65535个成员。
    create table t1(flag enum('a','b','c','d'));
    insert into t1 values('a'),('a'),('f');
    往enum类型里存储数据是忽略大小写的,对于插入不在enum指定范围内的值时,并没有返回警告,而是插入了enum的第一个值。
    另外enum类型只允许从值集合中选取单个值,而不能一次取多个值
    
3)SET类型
    set和enum类型非常类似,也是一个字符串对象,里面可以包含0~64个成员。根据成员的不同,存储上也有所不同。
    1~8成员的集合,占1个字节
    9~16成员的集合,占2个字节
    17~24成员的集合,占3个字节
    25~32成员的集合,占4个字节
    33~64成员的集合,占8个字节
    create table t1(flag set('a','b','c','d'));
    insert into t1 values('a,b'),('a,d,a');
    SET类型可以从允许值集合中选择任意1个或多元素进行组合,所以对于输出的值只要在允许的组合范围内,都可以正确地注入到set类型的
    列中。
    对于超出允许值范围的值,将不允许注入,对于包含重复的成员的集合将只取一次进行注入。
    使用FIND_IN_SET函数对set类型的数据进行查询是比较好的选择!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

沐思博客

打赏的人并不是任性,他们可能是

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值