您的位置:首页 > 数据库 > MySQL

MySql(7)------mysql数据类型之数值类型

2016-08-20 12:16 417 查看
MySql跟oracle一样,有多种数据类型,当然MySql与Oracle数据类型还是有些区别,

这里主要分析MySql数据类型,MySql数据类型主要包括数值,字符串,日期和时间。

这篇单独介绍数值类型。

1.1 整数类型

根据取值范围和存储方式不同,将整数分为tinyint,smallint,mediumint,int和bigint这5个类型。

因为不同的表示,范围是不同的,如果插入数据超过长度,都会报超过字段范围(out of range)错误。

数据库设计阶段,都需要根据需求,结合实际慎重选择类型和确定长度范围,避免返工。

对于整数类型,我们可以在建表的时候通过()指定长度,如果不指定,就是默认长度。

比如int默认为11位,我们可以通过int(5)指定长度为5位。

看一个int的实例:

创建一个表t1,有两个字段,均为int类型,一个id1,无长度限制,另外一个id2,限制长度为3,

然后正常插入一条数据:



如果插入数据超过字段位数限制会怎样?能否插入?

这个有两种情况,如果数据库是非严格模式,会进行自动截取长度位数保存,

如果数据库是严格模式,超过长度则无法保存。

看一下严格模式下插入报错信息:



实际应用中一般都是采用数据库的严格模式,否则对于敏感数据风险太大。

对于int还有一个属性,就是自增长属性:AUTO_INCREMENT,该属性只能用于int类型,

数据自增长,默认从1开始,对于自增长列除了是int类型外,必须是not null,同时必须是主键(primary key)或唯一列(unique)。

而且,每一个表中只能出现一个唯一列。一般在实际应用中作为主键属性使用,例如:



从实例可以看出,插入语句中并没有指定主键f_userId插入列,主键是靠auto_increment属性自动增长的,

当然,也可以显示的去插入主键值。

1.2 小数

MySql的小数分为两类:浮点数和定点数。

浮点数:float(单精度)和double(双精度)。

定点数:decimal

浮点数和定点数同样可以用(M,D)来设置精度,M表时精度,D表示标度,M = 整数位+小数位,D 为小数位,

对于decimal,如果我们不设置小数位,默认为decimal(10,0),小数位就存不进去。

注意,整个M的长度不包括小数点的,网上有些说包括小数点,其实自己试试就知道不包括小数点,自己动手,

显真实,别人说得天花乱坠的并不一定是事实,别人的东西对自己来说永远只是参考,如果是依赖,会束缚住自己前行。

对于要求精度比较高的,金钱,一般使用decimal,因为decimal是以字符串的形式存储在数据库中,比较准确。

eg1:



这里建立一个表,其中id1,id2,id3的类型分别为float,double,decimal,总长度为5为,小数部分占2位,

我们采用的是正常插入数值,没有报任何异常。

eg2:



我在严格模式,当插入数据超过定义小数位,报错。

eg3:



把数据库设置成非严格模式,这个是会话级别的设置,不是永久的设置,永久设置可以修改数据库配置,比如windows下,修改my.ini配置,

linux下修改/etc/my.cnf配置,重启数据库生效。这里作为测试,设置成会话级别的,在上面例子中,数据库在严格模式下插入超过长度限制

的数值,不让插入,但是,在非严格模式下,数据库自动进行四舍五入的保存。

1.3 bit(位)

对于位类型BIT(M)可以用来存放多为二进制数,M范围1~64位,如果不显示的设置,默认为1位。

对于二进制bit存入数据后直接通过select是看不到的,传说中的肉眼看不到,

还需使出火眼金睛bin()和hex()两个函数读取二进制为。关于这两个函数,

bin():读取显示为二进制格式

hex():读取显示为十六进制格式

eg:



直接通过select看不到显示值,通过bin(),hex()可以看到值二进制和十六进制显示值。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: