=========================================================
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,因此一定不能使用浮点数来存放金钱相关的数据。

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

bigint
从 -2^63 (-9223372036854775808) 到 2^63-1 (9223372036854775807) 的整型数据(所有数字)。存储大小为 8 个字节。
P.S. bigint已经有长度了,在mysql建表中的length,只是用于显示的位数 int
从 -2^31 (-2,147,483,648) 到 2^31 – 1 (2,147,483,647) 的整型数据(所有数字)。存储大小为 4 个字节。int 的 SQL-92 同义字为 integer。 smallint
从 -2^15 (-32,768) 到 2^15 – 1 (32,767) 的整型数据。存储大小为 2 个字节。 tinyint
从 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和空格。
测试:

CREATE TABLE `tb005` (
`id` int(2) unsigned zerofill NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8; INSERT INTO tb005(id)VALUES(1),(11),(111); SELECT * FROM tb005;
+-----+
| id |
+-----+
| 01 |
| 11 |
| 111 |
+-----+

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

## 字符串以-或数字开头
## 字符串以数字结尾
## 字符串中只能包含0或1个小数点
## 字符串中其他部分只能包含数字 SELECT
C1,
CASE WHEN
(C1 REGEXP '(^[0-9]|^-[0-9])([0-9]*)([.]?)([0-9]*)([0-9]$)')=1
THEN 'NUMBER' ELSE 'STRING' END AS C1_TYPE
FROM (
SELECT '' AS C1
UNION
SELECT '.'
UNION
SELECT '123.'
UNION
SELECT '.123'
UNION
SELECT '123A'
UNION
SELECT '1-23'
UNION
SELECT '0..23'
UNION
SELECT ''
UNION
SELECT ''
UNION
SELECT '0.23'
UNION
SELECT '.'
) AS T1

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

字符串转换为数值

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

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

mysql> SELECT CAST('123.4ABC56' AS DECIMAL(18,5));
+-------------------------------------+
| CAST('123.4ABC56' AS DECIMAL(18,5)) |
+-------------------------------------+
| 123.40000 |
+-------------------------------------+ mysql> SELECT CAST('123.4ABC56' AS SIGNED);
+------------------------------+
| CAST('123.4ABC56' AS SIGNED) |
+------------------------------+
| 123 |
+------------------------------+

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

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. jQuery操错题积累

    1: 解析: onBlur:焦点移除事件. onfocus:定义和用法 onfocus 事件在对象获得焦点时发生 onchange:定义和用法 onchange 事件会在域的内容改变时发生 nclic ...

  2. spin lock自旋锁 双链表操作(多线程安全)(Ring0)

    通过spin lock自旋锁 ,为每个链表都定义并初始化一个锁,在需要向该链表插入或移除节点时不使用前面介绍的普通函数,而是使用如下方法: ExInterlockedInsertHeadList(&a ...

  3. translclude

    .transclude:true 启用transclude,启用以后,有两个地方会发生变化: ①.使用指令的元素内部的所有内容都会被保存起来.不妨先把这一段内容称为一坨. 比如指令元素是这样的: &l ...

  4. DevExpress ASP.NET Bootstrap Controls v18.2新功能详解(二)

    行业领先的.NET界面控件2018年第二次重大更新——DevExpress v18.2日前正式发布,本站将以连载的形式为大家介绍新版本新功能.本文将介绍了DevExpress ASP.NET Boot ...

  5. 对称加密-java实现

    主要步骤如下: 1.利用SecretKeyFactory.getInstance("加密算法")创建密钥工厂,加密算法如"DES","AES" ...

  6. POJ - 3252 A - Round Numbers

    The cows, as you know, have no fingers or thumbs and thus are unable to play Scissors, Paper, Stone' ...

  7. Effective Java Methods Common to All Objects

    Obey the general contract when overriding equals 先了解equals 和 == 的区别,如果不重写equals, equals比较的仅仅只是是否引用同一 ...

  8. pytest 的 yield

    前言:1.当 pytest.fixture(scope="module") 时,pytest的yieId 类似unittest的teartownclass 2.当 pytest.f ...

  9. MySQL Workbench将模型生成SQL文件出错

    采用MySQL Workbench 设计好表和表关系后,从 File | Export 菜单中,选择 Forward Engineer SQL CREATE Script(正向引擎), 将我们的模型生 ...

  10. OneinStack 安装

    安装步骤 注意 如果有单独数据盘,建议您先挂载数据盘,建议将网站内容.数据库放在数据盘中.如何挂载数据盘,请参考(支持阿里云.腾讯云):<如何利用脚本自动化挂载数据盘?> yum -y i ...