【基础】数值类型
前言
Github:https://github.com/yihonglei/road-of-arch/tree/master/thinking-in-mysql
概述
MySql 跟 Oracle 一样,有多种数据类型,当然 MySql 与 Oracle 数据类型还是有些区别,这里主要分析 MySql 数据类型,
MySql 数据类型主要包括数值,字符串,日期和时间。
一 整数类型
根据取值范围和存储方式不同,将整数分为 tinyint,smallint,mediumint,int 和 bigint 这5个类型。
因为不同的表示,范围是不同的,如果插入数据超过长度,都会报超过字段范围(out of range)错误。
数据库设计阶段,都需要根据需求,结合实际慎重选择类型和确定长度范围,避免返工。
对于整数类型,我们可以在建表的时候通过 () 指定长度,如果不指定,就是默认长度。
比如 int 默认为 11 位,我们可以通过 int(5) 指定长度为 5 位。
1、int 的实例
创建一个表t1,有两个字段,均为 int 类型,一个 id1,无长度限制,另外一个id2,限制长度为3,然后正常插入一条数据。
如果插入数据超过字段位数限制会怎样?能否插入?
这个有两种情况,如果数据库是非严格模式,会进行自动截取长度位数保存,如果数据库是严格模式,超过长度则无法保存。
看一下严格模式下插入报错信息:
实际应用中一般都是采用数据库的严格模式,否则对于敏感数据风险太大。
对于 int 还有一个属性,就是自增长属性:AUTO_INCREMENT,该属性只能用于int类型,
数据自增长,默认从1开始,对于自增长列除了是 int 类型外,必须是 not null,同时必须是主键(primary key)或唯一列(unique)。
而且,每一个表中只能出现一个唯一列。一般在实际应用中作为主键属性使用,例如:
从实例可以看出,插入语句中并没有指定主键 f_userId 插入列,主键是靠 auto_increment 属性自动增长的,
当然,也可以显示的去插入主键值。
二 小数
MySql 的小数分为两类:浮点数 和 定点数。
浮点数:float(单精度)和double(双精度)。
定点数:decimal
浮点数和定点数同样可以用(M,D)来设置精度,M 表时精度,D 表示标度,M = 整数位+小数位,D 为小数位,
对于decimal,如果我们不设置小数位,默认为decimal(10,0),小数位就存不进去。
注意,整个M的长度不包括小数点的,对于要求精度比较高的,金钱,一般使用decimal,
因为decimal是以字符串的形式存储在数据库中,比较准确。
这里建立一个表,其中id1,id2,id3的类型分别为float,double,decimal,总长度为5为,小数部分占2位,
我们采用的是正常插入数值,没有报任何异常。
我在严格模式,当插入数据超过定义小数位,报错。
把数据库设置成非严格模式,这个是会话级别的设置,不是永久的设置,永久设置可以修改数据库配置,比如 windows下,修改 my.ini 配置,
linux 下修改 /etc/my.cnf 配置,重启数据库生效。这里作为测试,设置成会话级别的,在上面例子中,数据库在严格模式下插入超过长度限制
的数值,不让插入,但是,在非严格模式下,数据库自动进行四舍五入的保存。
三 bit(位)
对于位类型 BIT(M) 可以用来存放多为二进制数,M范围1~64位,如果不显示的设置,默认为1位。
对于二进制 bit 存入数据后直接通过 select 是看不到的,传说中的肉眼看不到,还需使出火眼金睛 bin() 和 hex() 两个函数读取二进制为。
关于这两个函数,bin():读取显示为二进制格式,hex():读取显示为十六进制格式。
直接通过 select 看不到显示值,通过bin(),hex()可以看到值二进制和十六进制显示值。
还没有评论,来说两句吧...