=========================================================
MySQL常见的整数类型有:
TINYINT: 占用8位空间
SMALLINT: 占用16位空间
MEDIUMINT: 占用24位空间
INT: 占用32位空间
BIGINT:只用64位空间

MySQL常见的实数类型有:
DECIAML: 用于存储精确的数据
FLOAT和DOUBLE:用于存储浮点类型的数据

可以设置数据类型的UNSIGNED属性来表示不允许有负值数据,同时增大正数的上限值。
如果TINYINT的存储范围为-128到127之间,而UNSIGNED TINYINT的存储范围为0到255。

=========================================================

在MySQL 4.1版本前使用浮点运算来实现DECIAML计算,因此会导致进度损失导致一些奇怪的结果。

在MySQL 5.0极其更高版本中,MySQL使用二进制字符串来保存DECIMAL类型数据(每4个字节存放9个数字),如对于DECIMAL(18,9),小数部分存放9个数字需要4个字节,整数部分存放9个数字需要4个字节,小数点本身需要1个字节,因此DECIMAL(18,9)类型的数据需要9个字节的存放空间。

FLOAT使用4个字节存储,DOUBLE使用8个字节存储,MySQL使用DOUBLE作为内部浮点计算的类型。

CPU直接支持原生的浮点计算,因此浮点运算比DECIMAL运算更快。

由于DECIMAL类型需要额外的空间和计算开销,因此可以考虑将DECIMAL转换成BIGINT来计算,如对于仅需到万分之一的财务数据,可以将数据乘以100万后变成BIGINT数据来存放。

由于十进制的数据无法用二进制来精确表示,只能尽可能的接近,如使用float(15,5)来存放1234567.10,最终存储的数据为1234567.12500,因此一定不能使用浮点数来存放金钱相关的数据。

=========================================================
数据类型占用存储空间和存储范围

  1. bigint
  2. -2^63 (-9223372036854775808) 2^63-1 (9223372036854775807) 的整型数据(所有数字)。存储大小为 8 个字节。
  3. P.S. bigint已经有长度了,在mysql建表中的length,只是用于显示的位数
  4.  
  5. int
  6. -2^31 (-2,147,483,648) 2^31 1 (2,147,483,647) 的整型数据(所有数字)。存储大小为 4 个字节。int SQL-92 同义字为 integer
  7.  
  8. smallint
  9. -2^15 (-32,768) 2^15 1 (32,767) 的整型数据。存储大小为 2 个字节。
  10.  
  11. tinyint
  12. 0 255 的整型数据。存储大小为 1 字节。

=========================================================
INT(M)与zerofill搭配使用,表示当现实的数据不足M位时,在前面填0补齐,如类型INT(2),数值1会显示为01。

INT(M) 在 integer 数据类型中,M 表示最大显示宽度。在 INT(M) 中,M 的值跟 int(M) 所占多少存储空间并无任何关系。和数字位数也无关系 INT(3)、INT(4)、INT(8) 在磁盘上都是占用 4 btyes 的存储空间。

zerofill的作用仅在显示检索结果的时候,左边用0补齐到display到指定的显示宽度,实际存储时不补0,在查询的过滤条件中忽略0和空格。
测试:

  1. CREATE TABLE `tb005` (
  2. `id` int(2) unsigned zerofill NOT NULL,
  3. PRIMARY KEY (`id`)
  4. ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
  5.  
  6. INSERT INTO tb005(id)VALUES(1),(11),(111);
  7.  
  8. SELECT * FROM tb005;
  9. +-----+
  10. | id |
  11. +-----+
  12. | 01 |
  13. | 11 |
  14. | 111 |
  15. +-----+

=========================================================
判断字符串是否是数值

  1. ## 字符串以-或数字开头
  2. ## 字符串以数字结尾
  3. ## 字符串中只能包含0或1个小数点
  4. ## 字符串中其他部分只能包含数字
  5.  
  6. SELECT
  7. C1,
  8. CASE WHEN
  9. (C1 REGEXP '(^[0-9]|^-[0-9])([0-9]*)([.]?)([0-9]*)([0-9]$)')=1
  10. THEN 'NUMBER' ELSE 'STRING' END AS C1_TYPE
  11. FROM (
  12. SELECT '' AS C1
  13. UNION
  14. SELECT '.'
  15. UNION
  16. SELECT '123.'
  17. UNION
  18. SELECT '.123'
  19. UNION
  20. SELECT '123A'
  21. UNION
  22. SELECT '1-23'
  23. UNION
  24. SELECT '0..23'
  25. UNION
  26. SELECT ''
  27. UNION
  28. SELECT ''
  29. UNION
  30. SELECT '0.23'
  31. UNION
  32. SELECT '.'
  33. ) AS T1

=========================================================

字符串转换为数值

可以使用CAST将字符串转换为整数(SIGNED 和UNSIGNED)或小数(DECIMAL),但不能将字符串直接转换为INT/BIGINT/FLOAT/DOUBLE等类型

在转换过程中,会尝试字符串最左边的数字,而不会报错,如'123.4ABC56'会被转换为123.4。

  1. mysql> SELECT CAST('123.4ABC56' AS DECIMAL(18,5));
  2. +-------------------------------------+
  3. | CAST('123.4ABC56' AS DECIMAL(18,5)) |
  4. +-------------------------------------+
  5. | 123.40000 |
  6. +-------------------------------------+
  7.  
  8. mysql> SELECT CAST('123.4ABC56' AS SIGNED);
  9. +------------------------------+
  10. | CAST('123.4ABC56' AS SIGNED) |
  11. +------------------------------+
  12. | 123 |
  13. +------------------------------+

=========================================================

MySQL DataType--数值类型的更多相关文章

  1. MySQL的数值类型,时间

    数值类型 整数型 tinyint  smallint  mediumint  int|integer  bigint 注意: 1, 如何选择数据类型,我们的原则是:够用就行!尽量的选择占用内存小的整型 ...

  2. MySQL数据类型——数值类型

    1.1.1 整型 整型 占用字节 范围 范围 tinyint 1 -27~27-1 -128~127 smallint 2 -215~215-1 -32768~32767 mediumint 3 -2 ...

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

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

  4. MySQL学习分享--数值类型

    数值类型 MySQL的数值类型包括整数类型.浮点数类型.定点数类型.位类型. 整数类型 MySQL支持的整数类型有tinyint.smallint.mediumint.int.bigint(范围从小到 ...

  5. mysql numberic types ---- mysql 数值类型详解

    编程语言中大多都有数据类型一说.虽然mysql 的sql 语句与标准sql 有别.但是宏观上看还是差不多的:下面我们说一下mysql数据库中的数值类型 一.在mysql里有那些类型可以表示数值: 1. ...

  6. MySQL (二)-- 数据类型(列类型)、数值类型、 小数类型、 时间日期类型、 字符串类型 、 MySQL记录长度、列属性

    1 数据类型(列类型) 所谓的数据类型:对数据进行统一的分类,从系统的角度出发是为了能够使用统一的方式进行管理,更好的利用有限的空间. SQL中将数据类型分成了三大类: 2 数值类型 数值类型数据:都 ...

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

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

  8. MySQL数值类型

    MySQL数值类型 MySQL支持所有标准的SQL数值数据类型.这些类型包括数值数据类型INTEGER.SMALLINT.DECIMAL.NUMERIC和近似数值数据类型FLOAT.REAL.DOUB ...

  9. { MySQL基础数据类型}一 介绍 二 数值类型 三 日期类型 四 字符串类型 五 枚举类型与集合类型

    MySQL基础数据类型 阅读目录 一 介绍 二 数值类型 三 日期类型 四 字符串类型 五 枚举类型与集合类型 一 介绍 存储引擎决定了表的类型,而表内存放的数据也要有不同的类型,每种数据类型都有自己 ...

  10. MySQL中int(M)和tinyint(M)数值类型中M值的意义

    在一开始接触MySQL数据库时,对于int(M)及tinyint(M)两者数值类型后面的M值理解是最多能够插入数据库中的值不能大于M: 后来工作后,也是一边学习一边使用,之后的理解是其中的M的意思是插 ...

随机推荐

  1. macOS Sierra 如何打开任何来源

    1.打开应用程序-实用工具-终端: 2.复制以下代码(红色处注意是两个-)到终端中,回车(输入电脑密码): sudo spctl --master-disable 3.打开应用程序-系统偏好设置-安全 ...

  2. :工厂模式1:方法模式--Pizza

    #ifndef __PIZZA_H__ #define __PIZZA_H__ class Pizza { public: Pizza(){} virtual ~Pizza(){} virtual c ...

  3. Tsi721信号及处理(转)

    reference: https://blog.csdn.net/shanghaiqianlun/article/details/50545581 1.      PCIe信号 名称 类型 描述 PC ...

  4. 未完全弄懂的题的题51nod1532

    转载自:https://blog.csdn.net/luricheng/article/details/527520941352 集合计数 基准时间限制:1 秒 空间限制:131072 KB 分值: ...

  5. css 1) calc() 函数的使用. 2)box-sizing:border-box

    calc() 是一个css 函数, 可以实现.计算 ---------------------------- 1. 每个div宽度是25%; 总共4个div. 同时 前三个div 有 border-r ...

  6. js继承中,原型属性的继承探究

    最近研究了js的继承,看了幻天芒的文章http://www.cnblogs.com/humin/p/4556820.html#3947420,明白了最好是使用apply或call方法来实现继承. 已知 ...

  7. jetty安装、配置、优化

    )Jetty: 作用:Jetty 是一个开源的servlet容器,它为基于Java的web内容,例如JSP和servlet提供运行环境. 特性:易用性,可扩展性,易嵌入性 2) Jetty安装:  t ...

  8. IONIC和Cordova安装、打包踩过的坑

    1.问题1:直接执行npm install -g cordova ionic,因为网络原因,执行不成功 解决方案:将npm映射到淘宝服务器:npm install -g cnpm --registry ...

  9. Python中读取文件中的json串,并将其写入到Excel表格中

    Json:JavaScript Objective Notation,是一种轻量级的数据交换格式.Json最广泛的应用是作为AJAX中web服务器和客户端的通讯的数据格式.现在也常用语http请求中, ...

  10. HTTP、TCP、IP、协议

    HTTP(HyperText Transfer Protocol) 即超文本传输协议,现在基本上所有web项目都遵从HTTP协议(协议就是一种人为的规范). 目前绝大部分使用的都是HTTP/1.1版本 ...