【基础】数值类型

电玩女神 2022-09-25 11:14 273阅读 0赞

前言

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,然后正常插入一条数据。

Center

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

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

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

Center 1

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

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

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

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

Center 2

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

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

二 小数

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

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

定点数:decimal

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

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

注意,整个M的长度不包括小数点的,对于要求精度比较高的,金钱,一般使用decimal,

因为decimal是以字符串的形式存储在数据库中,比较准确。

Center 3

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

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

Center 4

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

Center 5

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

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

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

三 bit(位)

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

对于二进制 bit 存入数据后直接通过 select 是看不到的,传说中的肉眼看不到,还需使出火眼金睛 bin() 和 hex() 两个函数读取二进制为。

关于这两个函数,bin():读取显示为二进制格式,hex():读取显示为十六进制格式。

Center 6

直接通过 select 看不到显示值,通过bin(),hex()可以看到值二进制和十六进制显示值。

发表评论

表情:
评论列表 (有 0 条评论,273人围观)

还没有评论,来说两句吧...

相关阅读