数值类型

MySQL的数值类型包括整数类型、浮点数类型、定点数类型、位类型。

整数类型

MySQL支持的整数类型有tinyint、smallint、mediumint、int、bigint(范围从小到大)。

zerofill

我们在定义整数类型时可以在类型名称后面的小括号内指定显示宽度,例如int(5),当插入的数值宽度小于5位时,MySQL会在数值前面填充缺少的宽度。

显示宽度一般是配合zerofill来使用,当插入的数值位数未达到指定的显示宽度时,缺少几位就会在数值前填充几个0

我们创建表t_1,两个字段分别为id1和id2,都是int类型。其中id2我们指定了显示宽度为5,而id1没有手动指定显示宽度,因此它的显示宽度会取默认值11。

我们向表中插入一条数据后再将其查询出来,虽然现在id1和id2查询出来的数值都是1,但id1的数值1前面10位都被填充了宽度,id2的数值1前面4位被填充宽度。

为了更加直观的看到填充宽度的效果,我们将id1和id2的定义稍作修改,使用zerofill来填充宽度。

在使用了zerofill后,我们可以看到数值前面被0填充宽度的效果。这里引发一个疑问,我们在进行查询时使用1或00001作为条件可以得到结果吗?

可以看到在使用1或00001作为查询条件时,能查出id2对应的数值。这里要注意的是在MySQL中实际存储的值仍然是1,而不是00001,因为00001并不是一种整数的表现形式,而是一种字符串的表现形式,00001只是在设置了zerofill后的一种格式化输出而已,下面的截图将证明这个问题。

我们在查询时使用hex()函数作为对比,可以看到使用hex()函数得到的值是1,假若hex()得到的值是3030303031(字符串1的16进制为31,字符串0的16进制为30),则可以肯定在MySQL中是以00001的字符串形式进行存储的,但很明显这里并不是。

注:hex()函数可以将一个数字或字符串转换为十六进制格式的字符串

对于指定显示宽度的做法,这里引发一个疑问,在id2定义为int(5)的情况下,如果插入超过显示宽度的值,会怎么样呢?

向id2插入长度为6位的数值111111时,MySQL没有报任何错误也没有将111111截断,因此说明显示宽度并不会对插入的数值长度产生限制,两者并没有什么关系,除非插入的数值超过了数据类型的范围。

可以看到虽然插入成功但MySQL有一个警告(当MySQL的SQL Mode为严格模式时,该插入行为将不能够被完成,同时MySQL会报ERROR),我们在将数据查询出来时可以看到MySQL对原本插入的数据进行了截取,保留值为4294967295。

注:int数据类型有符号的最小值为-2147483648,最大值为2147483647,无符号的最小值为0,最大值为4294967295

知识点总结:

其实对于显示宽度来说,只有配合使用zerofill,显示宽度才有意义,否则就让显示宽度为默认值就可以了。不要以为指定显示宽度会对整数类型的取值范围有什么影响,两者之间没有任何关系,对整数类型的取值范围有影响的是unsigned属性。

unsigned

当我们在定义整数类型时使用了zerofill,MySQL会为我们自动对该列再添加unsigned(见下面截图)。这是因为当使用了zerofill后,插入该列的值就不可能为负数了,因此自动添加unsigned是可以理解的,同时unsigned也会增加整数类型最大值的取值范围。

auto_increment

整数类型还有一个属性就是auto_increment,而且这个属性还是整数类型特有的。auto_increment的作用就是使列值保持自动增长,auto_increment的值默认从1开始,也可以手动设置其初始值。对被设置为auto_increment的列插入null值时,实际插入的值是正常进行自动增长的那个值。

当一个列被设置为auto_increment时,通常还需要为该列设置not null和primary key(主键,一般被设置为auto_increment的列会作为主键使用)。另外需要提醒的是一张表中最多只能有一个字段被设置为auto_increment。

MySQL学习分享--数值类型的更多相关文章

  1. MySQL学习分享--Thread pool实现

    基于<MySQL学习分享--Thread pool>对Thread pool架构设计的详细了解,本文主要对Thread pool的实现进行分析,并根据Mariadb和Percona提供的开 ...

  2. MySQL学习分享-->日期时间类型

    日期时间类型 ①如果要用来表示年月日时分秒,一般使用datetime类型: ②如果要用来表示年月日,一般使用date类型: ③如果要表示时分秒,一般使用time类型: ④如果只是表示年份,一般使用ye ...

  3. sqoop mysql导入hive 数值类型变成null的问题分析

    问题描述:mysql通过sqoop导入到hive表中,发现有个别数据类型为int或tinyint的列导入后数据为null.设置各种行分隔符,列分隔符都没有效果. 问题分析:hive中单独将有问题的那几 ...

  4. MySql学习之varchar类型

    MySQL 数据库的varchar类型在4.1以下的版本中的最大长度限制为255,其数据范围可以是0~255或1~255(根据不同版本数据库来定),在 MySQL5.0以上的版本中,varchar数据 ...

  5. MySQL学习分享-->查询-->查询的分类

    MySQL的查询可以分为交叉联接.内联接.外联接.自然联接.straight_join 下面对于查询的学习,会用到以下四张表: create table t_commodity_type( `id` ...

  6. MySql学习---数据库基本类型,事务,多表查询

    数据库分类 关系型数据库 行列, 列如Mysql,oracle 通过表和表之间,行和列之间的关系进行数据的存储 非关系型数据库: Redis,MongDb 以对象存储,同过对象的自身属性来决定 表与表 ...

  7. MySQL学习分享-->查询-->查询的原理

    查询的原理 在一个查询中常包含下述子句: 1.select,2.distinct,3.join,4.on,5.from,6.where,7.having,8.group by,9.order by,1 ...

  8. MySQL学习——数据类型

    MySQL学习——数据类型 摘要:本文主要学习了MySQL数据库的数据类型. 整数类型 MySQL主要提供的整数类型有tinyint.smallint.mediumint.int.bigint,其属性 ...

  9. MySQL学习进阶

    存储引擎 MyISAMMySQL 5.0 之前的默认数据库引擎,最为常用.拥有较高的插入,查询速度,但不支持事务 InnoDB事务型数据库的首选引擎,支持ACID事务,支持行级锁定, MySQL 5. ...

随机推荐

  1. Python3基础 闭包 简单示例

    镇场诗: 诚听如来语,顿舍世间名与利.愿做地藏徒,广演是经阎浮提. 愿尽吾所学,成就一良心博客.愿诸后来人,重现智慧清净体.-------------------------------------- ...

  2. ubuntu 15.10安装搜狗输入法不能打开

    安装Linux是为了更好的做开发,而开发其实不需要输入中文的,然而 在大中国的环境下,电脑没有中文输入法是不行的... 这次装ubuntu 坚持了4天没有中文输入法,我能说,其实没有中文输入法貌似也没 ...

  3. Antx简介(ali_PPT)

    Antx的由来: §最早,我们用Makefile来build系统 •Makefile不适合Java的编译 §后来,我们用Ant来build系统 •开始时很不错 •随着项目增多,出现困难 §利用bean ...

  4. HDU-2502-月之数

    题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=2502 分析: 比如n=4时,有: 1000 1001 1010 1011 1100 1101 1110 ...

  5. globalToLocal的坐标变换

    globalToLocal $(function() { init(); }); // globalToLocal var stage, holder1, holder2,shape; functio ...

  6. sitemap.xml 的 几个东西

    https://github.com/PureKrome/SimpleSitemap/wiki/Sitemap-Index-example  简单类实现 支持sitemapindex 有说明向导 ht ...

  7. FMS4中的P2P功能

    在fms4以前Adobe只允许在stratus中才能使用p2p功能.令人高兴的是,在最新发布的fms4中,p2p功能已经集成进来了,这将给实时视频类的应用带来更高的效率,adobe这次很给力! 为了使 ...

  8. 如何解决“BPM导入组织架构出现问题导致系统无法登陆”

    遇到问题如图所示↓ 进入H3系统登陆页面. 点击登陆后显示如图错误. 跟踪后显示参数为空.问题描述:通过web service方式进行组织机构导入,只导入ObjectID和Name等共通的6个字段.导 ...

  9. 【Scala】Scala之Control Structures

    一.前言 前面学习了Scala的Numbers,接着学习Scala的Control Structures(控制结构). 二.Control Structures Scala中的控制结构与Java中的颇 ...

  10. ECJTUACM16 Winter vacation training #4 题解&源码

    A......................................................................................... 题目链接→Code ...