easyexcel⽇期类型convert_MySQL-多种数据类型详述MySQL 提供很多种数据类型来对不同的常量、变量进⾏区分,MySQL 中的数据类型主要是 数值类型、⽇期和时间类型、字符串类型 选择合适的数据类型进⾏数据的存储⾮常重要,在实际开发过程中,选择合适的数据类型也能够提⾼ SQL 性能,所以有必要认识⼀下这些数据类型。
数值类型
MySQL ⽀持所有标准的 SQL 数据类型,这些数据类型包括严格数据类型的严格数值类型,这些数据类型有INTEGER
SMALLINT
DECIMAL
NUMERIC。
近似数值数据类型 并不⽤严格按照指定的数据类型进⾏存储,这些有
FLOAT
REAL
DOUBLE PRECISION
还有经过扩展之后的数据类型,它们是
TINYINT
MEDIUMINT
BIGINT
BIT
其中 INT 是 INTEGER 的缩写,DEC 是 DECIMAL 的缩写。
下⾯是所有数据类型的汇总
整数
在整数类型中,按照取值范围和存储⽅式的不同,分为
TINYINT ,占⽤ 1 字节
SMALLINT,占⽤ 2 字节
MEDIUMINT,占⽤ 3 字节
INT、INTEGER,占⽤ 4 字节
BIGINT,占⽤ 8 字节
五个数据类型,如果超出类型范围的操作,会发⽣错误提⽰,所以选择合适的数据类型⾮常重要。
还记得我们上⾯的建表语句么
我们⼀般会在 SQL 语句的数据类型后⾯加上指定长度来表⽰数据类型许可的范围,例如
int(7)
表⽰ int 类型的数据最⼤长度为 7,如果填充不满的话会⾃动填满,如果不指定 int 数据类型的长度的话,默认是 int(11)。
我们创建⼀张表来演⽰⼀下
create table test1(aId int, bId int(5));/* 然后我们查看⼀下表结构 */desc test1;
整数类型⼀般配合 zerofill 来使⽤,顾名思义,就是⽤ 0 进⾏填充,也就是数字位数不够的空间使⽤ 0 进⾏填充。
分别修改 test1 表中的两个字段
alter table test1 modify aId int zerofill;alter table test1 modify bId int(5) zerofill;
然后插⼊两条数据,执⾏查询操作
如上图所⽰,使⽤zerofill 可以在数字前⾯使⽤ 0 来进⾏填充,那么如果宽度超过指定长度后会如何显⽰?我们来试验⼀下,向 aId 和 bId 分别插⼊超过字符限制的数字
会发现 aId 已经超出了指定范围,那么我们对 aId 插⼊⼀个在其允许范围之内的数据
会发现,aId 已经插进去了,bId 也插进去了,为什么 bId 显⽰的是 int(5) 却能够插⼊ 7 位长度的数值呢?
所有的整数都有⼀个可选属性 UNSIGNED(⽆符号),如果需要在字段⾥⾯保存⾮负数或者是需要较⼤上限值时,可以使⽤此选项,它的取值范围是正常值的下限取 0 ,上限取原值的 2 倍。如果⼀个列为 zerofill ,会⾃动为该列添加 UNSIGNED 属性。
除此之外,整数还有⼀个类型就是 AUTO_INCREMENT,在需要产⽣唯⼀标识符或者顺序值时,可利⽤此属性,这个属性只⽤于整数字符。⼀个表中最多只有⼀个 AUTO_INCREMENT 属性,⼀般⽤于
⾃增主键,⽽且 NOT NULL,并且是 PRIMARY KEY 和 UNIQUE 的,主键必须保证唯⼀性⽽且不为空。
⼩数
⼩数说的是啥?它其实有两种类型;⼀种是浮点数类型,⼀种是定点数类型;
浮点数有两种
单精度浮点型 - float 型
双精度浮点型 - double 型
定点数只有⼀种 decimal。定点数在 MySQL 内部中以字符串的形式存在,⽐浮点数更为准确,适合⽤来表⽰精度特别⾼的数据。
浮点数和定点数都可以使⽤ (M,D) 的⽅式来表⽰,M 表⽰的就是 整数位 + ⼩数位 的数字,D 表⽰位于 . 后⾯的⼩数。M 也被称为精度
,D 被称为标度。
下⾯通过⽰例来演⽰⼀下
⾸先建⽴⼀个 test2 表
CREATE TABLE test2 (aId float(6,2) default NULL, bId double(6,2) default NULL,cId decimal(6,2) default NULL)
然后向表中插⼊⼏条数据
insert into test2 values(1234.12,1234.12,1234.12);
这个时候显⽰的数据就是
然后再向表中插⼊⼀些约束之外的数据
insert into test2 values(1234.123,1234.123,1234.123);
发现插⼊完成后还显⽰的是 1234.12,⼩数位第三位的值被舍去了。
现在我们把 test2 表中的精度全部去掉,再次插⼊
alter table test2 modify aId float;alter table test2 modify bId double;alter table test2 modify cId decimal;先查询⼀下,发现 cId 舍去了⼩数位。
然后再次插⼊ 1.23,SQL 语句如下
insert into test2 values(1.23,1.23,1.23);
结果如下
这个时候可以验证
浮点数如果不写精度和标度,会按照实际的精度值进⾏显⽰
定点数如果不写精度和标度,会按照 decimal(10,0) 来进⾏操作,如果数据超过了精度和标题,MySQL 会报错
位类型
对于位类型,⽤于存放字段值,BIT(M) 可以⽤来存放多位⼆进制数,M 的范围是 1 - 64,如果不写的话默认为 1 位。
下⾯我们来掩饰⼀下位类型
新建⼀个 test3 表,表中只有⼀个位类型的字段
create table test3(id bit(1));
然后随意插⼊⼀条数据
insert into test3 values(1);
发现⽆法查询出对应结果。
然后我们使⽤ hex() 和 bin() 函数进⾏查询
发现能够查询出对应结果。
也就是说当数据插⼊ test3 时,会⾸先把数据转换成为⼆进制数,如果位数允许,则将成功插⼊;如果位数⼩于实际定义的位数,则插⼊失败。如果我们向表中插⼊数据 2
mysql创建表数据类型insert into test3 values(2);
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论