编程语言中大多都有数据类型一说、虽然mysql 的sql 语句与标准sql 有别、但是宏观上看还是差不多的;下面我们说一下mysql数据库中的数值类型

一、在mysql里有那些类型可以表示数值

  1、总体上看mysql 对数值类型的分类,可以分为整型(整数),浮点型(小数点的数)

  整型:

bit       [(m)]
tinyint [(m)] [unsigned] [zerofill]
smallint [(m)] [unsigned] [zerofill]
mediumint [(m)] [unsigned] [zerofill]
int [(m)] [unsigned] [zerofill]
bigint [(m)] [unsigned] [zerofill] bool -- 它是tinyint(1) 的别名
serial [(m)] [unsigned] [zerofill] -- 它是bigint unsigned not null auto_increment unique 的别名

  浮点型:

decimal   [(m,d)] [unsigned] [zerofill]
float [(m,d)] [unsigned] [zerofill]
double [(m,d)] [unsigned] [zerofill]
dec [(m,d)] [unsigned] [zerofill] -- 它是decimal 的别名
numerric [(m,d)] [unsigned] [zerofill] -- 它是decimal 的别名
fixed [(m,d)] [unsigned] [zerofill] -- 它是decimal 的别名
double precision [(m,d)] [unsigned] [zerofill] -- 它是double 的别名
real [(m,d)] [unsigned] [zerofill] -- 它是double 的别名

二、整数类型中的 m 表示什么意思

  1、对于bit 来说 m 表示要保存的二进制位的长度,最大为64。

  2、对于其它整数来说 m 表示的是数值的展示长度,还刻生活中的1号,我们有时候也写成0001号吗?这里把1展示成0001

  就是说它的展示长度是4位;1只有一位,0001有四位,生活中我们的大脑自动用0来补充了前面的三个空位,但是在MySQL

  中我们要为它显示的指定 zerofill 属性。

  3、例子

mysql> create table t(x int(4)); -- 4位展示宽度
Query OK, 0 rows affected (0.00 sec) mysql> insert into t(x) values(1),(22),(333),(4444),(55555);
Query OK, 5 rows affected (0.00 sec)
Records: 5 Duplicates: 0 Warnings: 0 mysql> select * from t; -- 没有和zerofill 配合是看不要m的效果的
+-------+
| x |
+-------+
| 1 |
| 22 |
| 333 |
| 4444 |
| 55555 |
+-------+
5 rows in set (0.00 sec) mysql> alter table t modify column x int(4) zerofill; -- 加上 zerofill 属性
Query OK, 5 rows affected (0.02 sec)
Records: 5 Duplicates: 0 Warnings: 0 mysql> select * from t;
+-------+
| x |
+-------+
| 0001 |
| 0022 |
| 0333 |
| 4444 |
| 55555 |
+-------+
5 rows in set (0.00 sec)

三、浮点数中的 m 与 d :

  1、m 表示总长度(小数点前的位数 + 小数据点后的位数)

  2、d  表示小数点后的位数,这两个数据中可以推出一个等式   小数据点前的位数 = m - d

  3、例子:定义一个列 x 小数点前只能保存两位数,小数据点后只能保存两位数

mysql> create table t(x decimal(4,2)); -- 定义decimal 类型的x 只能保存2位整数,和2位小数
Query OK, 0 rows affected (0.01 sec) mysql> insert into t(x) values(1.1),(22.22); -- 满足定义
Query OK, 2 rows affected (0.01 sec)
Records: 2 Duplicates: 0 Warnings: 0 mysql> insert into t(x) values(1.111); -- 小数部分超出范围会被舍去
Query OK, 1 row affected, 1 warning (0.00 sec) mysql> select * from t;
+-------+
| x |
+-------+
| 1.10 |
| 22.22 |
| 1.11 |
+-------+
3 rows in set (0.01 sec) mysql> insert into t(x) values(333.22); -- 整数部分超出范围会报错
ERROR 1264 (22003): Out of range value for column 'x' at row 1

四、数值类型中的unsigned 、zerofill

  1、unsigned 专业点来说这个叫无符号、所以负数就保存不了,了! 把之前存负数的空间也都用来保存正数, 所以能保存的正数的数量就多了。

  2、zerofill 表示当数值的长度小了展示宽度时,用0 去填充那些不足的宽度(可以见二当中的例子)。

  3、如果为一个列指定了zerofill 属性 那么mysql会自己为列加上unsigned 属性。

五、各个类数值列所占空间的大小

  1、整数

type            storage(byte)       min                     max

tinyint         1                   -128                    127
smallint 2 -32768 32767
mediumint 3 -8388608 8388607
int 4 -2147483648 2147483647
bigint 8 -9223372036854775808 9223372036854775807

  2、浮点数

type            storage(byte)       min                     max
float 4
double 8

  3、decimal

  官方文档中没有看到相关的内容,我猜这可能是用的大数算法;就是说decimal(m,d) 会战用m 个字节!这样做虽然占空间,但是

  它有一个好处就是可以精确的保存值;不像float 和double 这类的数据类型只能保存近似值!

----

学习交流

mysql numberic types ---- mysql 数值类型详解的更多相关文章

  1. Mysql 数据库数值类型详解

    MySQL 支持所有标准SQL 中的数值类型,其中包括严格数值类型(INTEGER.SMALLINT.DECIMAL 和NUMERIC),以及近似数值数据类型(FLOAT.REAL 和DOUBLE P ...

  2. MySQL中tinytext、text、mediumtext和longtext等各个类型详解

    转: MySQL中tinytext.text.mediumtext和longtext等各个类型详解 2018年06月13日 08:55:24 youcijibi 阅读数 26900更多 个人分类: 每 ...

  3. (转)MySQL字段类型详解

    MySQL字段类型详解 原文:http://www.cnblogs.com/100thMountain/p/4692842.html MySQL支持大量的列类型,它可以被分为3类:数字类型.日期和时间 ...

  4. mysql float类型详解

    mysql float类型详解float类型长度必须设置3以上 不然会报错 out of range如果设置3 就只是 整数+小数的长度 比方说3.23 3.2等等 3.333就不行了 4位了

  5. 【转】MySQL用户管理及SQL语句详解

    [转]MySQL用户管理及SQL语句详解 1.1 MySQL用户管理 1.1.1 用户的定义 用户名+主机域 mysql> select user,host,password from mysq ...

  6. (转)MySQL性能调优my.cnf详解

    MySQL性能调优my.cnf详解 https://blog.linuxeye.cn/379.html http://blog.csdn.net/orichisonic/article/details ...

  7. MySql绿色版配置及使用详解

    原文:MySql绿色版配置及使用详解 最近在做项目开发时用到了MySql数据库,在看了一些有关MySql的文章后,很快就上手使用了.在使用的过程中还是出现了一些问题,因为使用的是绿色免安装版的MySq ...

  8. MySQL数据库使用mysqldump导出数据详解

    mysqldump是mysql用于转存储数据库的实用程序.它主要产生一个SQL脚本,其中包含从头重新创建数据库所必需的命令CREATE TABLE INSERT等.接下来通过本文给大家介绍MySQL数 ...

  9. MySQL数据库的各种存储引擎详解

    原文来自:MySQL数据库的各种存储引擎详解   MySQL有多种存储引擎,每种存储引擎有各自的优缺点,大家可以择优选择使用: MyISAM.InnoDB.MERGE.MEMORY(HEAP).BDB ...

随机推荐

  1. 用SoapUI进行Webservice的性能压力测试

    转载:http://www.cnblogs.com/fnng/archive/2011/08/11/2135440.html 第一步: 新建一个项目:点击新建按钮就行了. 在打开的窗口中填写你项目名, ...

  2. 内核镜像zImage是如何生成的

    转载:内核镜像zImage是如何生成的 内核镜像zImage是如何生成的 前面两篇文章介绍了vmlinux 文件生成,这个文件必然是核心的linux内核,但是它是ELF格式的文件,其中包含了可执行的二 ...

  3. /dev/fb0入门练习

    转:http://hi.baidu.com/fsx92/item/bdbf90d8adab409f260ae738 大家都知道Unix/Linux系统是由命令驱动的.那么最基本的系统是命令行的(就是想 ...

  4. TortoiseSVN 图文使用教程

      1 安装及下载client 端 2 什么是SVN(Subversion)? 3 为甚么要用SVN? 4 怎么样在Windows下面建立SVN Repository? 5 建立一个Working目录 ...

  5. FastStone Capture 8.4 注册码

    原文:https://blog.csdn.net/mlin_123/article/details/51557079 name:bluman serial/序列号/注册码:VPISCJULXUFGDD ...

  6. [翻译] AnimatedTransitionGallery

    AnimatedTransitionGallery 转场动画回廊 https://github.com/shu223/AnimatedTransitionGallery Collection of i ...

  7. 轻量级java开发(一)-Hibernate 安装

    1.从http://hibernate.org/orm/downloads/下载Hibernate 目前最新版是4.3.0.Final  支持JPA 2.1 support 2.解压下载的压缩文件,导 ...

  8. OpenCV定制化创建角点检测子

    定制化创建角点检测子 目标 在这个教程中我们将涉及: 使用 OpenCV 函数 cornerEigenValsAndVecs 来计算像素对应的本征值和本征向量来确定其是否是角点. 使用OpenCV 函 ...

  9. 数学图形(1.41)super spiral超级螺线

    一种很酷的螺线,看着有种分形学的感觉.参考自http://www.2dcurves.com/spiral/spirallos.html 其数学的极坐标表达式如下: 我的脚本代码如下: #http:// ...

  10. DRP经验总结

    思想 指导 从开始看DRP项目到完成已经有三个月左右的时间了,这是一个足够长的视频,当看第一集的时候就再想,啥时候看完呢? 其间,也断断续续,有时看的效率高有时相反,有时几天看不了几集,好在总算看完了 ...