Mysql数据类型之浮点与二进制型数据

数据类型概述

Mysql里的数据类型主要有数值型(整形、浮点型)、时间类型、字符串类型、JSON类型、坐标类型、混合类型(整数或字符串)。

数值型范围表格

数据类型

存储位数

数据范围

tinyint

1

有符号: -128–127  无符号: 0–255

smallint

2

有符号:--32768–32767 无符号:0–65535

mediumint

3

有符号:-8388608–8388607 无符号:0–16777215

int

4

有符号:-2147483648–2147483647 无符号: 0–4294967295

bigint

8

有符号: -2^63 - 2^63-1 无符号: 0–2^64-1

decimal(M, N)

1–29

M 1到65 N 0到38,M大于等于N

float

4

总位数65(其中小数部分38)

double

8

总位数65(其中小数部分38)

bit(M)

1-8

1-64 bits

decimal的说明

1 decimal(5,2) 即小数点后面是2位,总5位(整数部分3位),所以范围是-999.99-999.99。

2  decimal(m) 等价于decimal(m,0),即不含小数点部分。而decimal,即不指定精度时对应decimal(10,0)。

float double的说明

1 float可以指定存储“精度”(不是数据范围),形式为flaot(n),该精度n和影响其存储。当n在0和23之间则存储时需要4个字节,而24到53之间则需要8个字节。

2 float也可以指定数据精度,一般形式为flaot(M,D),M代表总数值的位数,而D是小数点后的位数,比如float(7,3)的数据范围是-9999.999到9999.999。

3 当float里指定了数据精度时,插入的数据将按照指定的精度四舍五入。比如在2里精度下9999.99859插入时将是9999.999,而9999.99849则是9999.998。

4 因为float和double存的是近似数,所以在做比较运算时可能会有问题。

bit的说明

1 bit类型是用来存二进制类型,它的一般形式是bit(M),其中M的范围是1到64。

比如b'111' and b'10000000' 分别对应十进制的7和128。

2 添加到bit类型里的数据如果位数小于指定的M,则左边自动补0。比如将b'101' 添加到列BIT(6)里时等价于b'000101'。

3 bit类型不指定精度时默认是1。

代码验证

浮点型

DROP TABLE tb_fixpoint
CREATE TABLE tb_fixpoint
(id int auto_increment,
decimal_1 decimal,
primary key(id)
)-- 查看创建脚本
show create table tb_fixpoint;
CREATE TABLE `tb_fixpoint` (`id` int(11) NOT NULL AUTO_INCREMENT,`decimal_1` decimal(10,0) DEFAULT NULL,PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb3# 1 插入最多10位的整数
INSERT INTO tb_fixpoint VALUES(1,9999999999)
> Affected rows: 1
> 时间: 0.324s# 2 插入11位以上数报错
INSERT INTO tb_fixpoint VALUES(2,10000000000)
> 1264 - Out of range value for column 'decimal_1' at row 1
> 时间: 0.001s
# 3 插入含小数点的数不报错,但实际截取小数点后的数
INSERT INTO tb_fixpoint VALUES(2,9999999999.2987)SELECT * FROM tb_fixpoint2 反例验证decimal范围
#2.1 总位数最多65位
ALTER TABLE tb_fixpoint ADD decimal_2 decimal(66,29)
> 1426 - Too big precision 66 specified for 'decimal_2'. Maximum is 65
> 时间: 0s#2.2 小数点最多38位
ALTER TABLE tb_fixpoint ADD decimal_2 decimal(65,39)
> 1425 - Too big scale 39 specified for 'decimal_2'. Maximum is 38
> 时间: 0s
#2.3 总位数65,小数点后最多38位。
ALTER TABLE tb_fixpoint ADD decimal_2 decimal(65,38)
> OK
> 时间: 0.47s--#2.4   填充整数部分
UPDATE tb_datatype
SET decimalcol= REPEAT(9,27)
WHERE id = 1--#2.5 填充整数小数部分
UPDATE tb_datatype
SET decimalcol= CONCAT(REPEAT(9,27),'.',REPEAT(9,38))
WHERE id = 1# 如果定义float(7,4)则存的范围是-9999.999到9999.999
UPDATE tb_fixpoint SET float_3=9999.999 WHERE id = 1;
UPDATE tb_fixpoint SET float_3=-9999.999 WHERE id = 2;# 会按照四舍五入方式截断数据
UPDATE tb_fixpoint SET float_3=9999.99859 WHERE id = 2;
UPDATE tb_fixpoint SET float_3=9999.99849 WHERE id = 2;
-- 结果
9999.999
9999.998

bit型

# 新增bit类型
ALTER TABLE tb_fixpoint ADD bit_1 bit;
UPDATE tb_fixpoint SET bit_1=b'01' WHERE id = 1;
UPDATE tb_fixpoint SET bit_1=B'0' WHERE id = 2;
#这里不能写成0B,必须是小写的b。
UPDATE tb_fixpoint SET bit_1=0b01 WHERE id = 2;
#二进制数据只有0和1,2及其它数字都是错误输入。
UPDATE tb_fixpoint SET bit_1=b'02' WHERE id = 1;
> 1064 - You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'b'02' WHERE id = 1' at line 1
> 时间: 0s
# 超出bit的范围
ALTER TABLE tb_fixpoint ADD bit_2 bit(65)
> 1439 - Display width out of range for 'bit_2' (max = 64)
> 时间: 0s# 超出bit的范围,精度只到64.
ALTER TABLE tb_fixpoint ADD bit_2 bit(64)
> OK
> 时间: 0.692s#插入65位二进制数据。
UPDATE tb_fixpoint SET bit_2=b'11111111111111111111111111111111111111111111111111111111111111110' WHERE id = 1
> 1264 - Out of range value for column 'bit_2' at row 1
> 时间: 0.001s#插入64位二进制数据。
UPDATE tb_fixpoint SET bit_2=b'1111111111111111111111111111111111111111111111111111111111111111' WHERE id = 2
> Affected rows: 1
> 时间: 0.065s#查看二进制数据及其字符编码
SELECT b'1000011', CHARSET(b'1000011');
结果为:C#二进制数据结合字符集查看数据
SELECT _latin1 b'1000011';
SELECT _utf8 0b1000011 COLLATE utf8_danish_ci;结果都是 C

完整脚本

SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;-- ----------------------------
-- Table structure for tb_fixpoint
-- ----------------------------
DROP TABLE IF EXISTS `tb_fixpoint`;
CREATE TABLE `tb_fixpoint`  (`id` int(11) NOT NULL AUTO_INCREMENT,`decimal_1` decimal(10, 0) NULL DEFAULT NULL,`decimal_2` decimal(65, 38) NULL DEFAULT NULL,`float_1` float NULL DEFAULT NULL,`float_2` float NULL DEFAULT NULL,`float_3` float(7, 3) NULL DEFAULT NULL,`bit_1` bit(1) NULL DEFAULT NULL,`bit_2` bit(64) NULL DEFAULT NULL,PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 3 CHARACTER SET = utf8mb3 COLLATE = utf8mb3_general_ci ROW_FORMAT = Dynamic;-- ----------------------------
-- Records of tb_fixpoint
-- ----------------------------
INSERT INTO `tb_fixpoint` VALUES (1, 9999999999, NULL, NULL, NULL, 9999.999, b'1', NULL);
INSERT INTO `tb_fixpoint` VALUES (2, 9999999999, NULL, NULL, NULL, 9999.998, b'1', b'1111111111111111111111111111111111111111111111111111111111111111');SET FOREIGN_KEY_CHECKS = 1;

Mysql数据类型之浮点与二进制型数据使用案例总结相关推荐

  1. MySQL数据类型--------浮点类型实战

    1. 背景 * MySQL支持的浮点类型中有单精度类型(float), 双精度类型(double),和高精度类型(decimal),在数字货币类型中推荐使用高精度类型(decimal)来进行应用. * ...

  2. oracle mysql 数据类型对比_Oracle、SQL Server、MySQL数据类型对比

    1,标准SQL数据类型 BINARY 每个字符占一个字节 任何类型的数据都可存储在这种类型的字段中.不需数据转换(例如,转换到文本数据).数据输入二进制字段的方式决定了它的输出方式. BIT 1 个字 ...

  3. mysql lint的范围_【MySQL】MySQL数据类型

    MySQL表数据存储大小说明 MySQL中规定,任何一条记录(数据表中每行数据)理论上的最大存储容量为 2^16 - 1 (Bytes) = 65535字节. MySQL数据类型思维导图 MySQL数 ...

  4. MySQL数据类型及范围用法一览表

    http://www.metsky.com/archives/84.html 一.MySQL的数据类型 主要包括以下五大类: 整数类型:BIT.BOOL.TINY INT.SMALL INT.MEDI ...

  5. Database学习 - mysql数据类型

    MySQL数据类型 可以被分为3类: 1.整型,数值类型 2.日期和时间类型 3.字符串(字符)类型 整型(INT) 数据类型 大小 M (默认值) 范围(有符号) 范围(无符号) 用途 tinyin ...

  6. MySQL(4)---MYSQL 数据类型

    MySQL 数据类型 MySQL中定义数据字段的类型对你数据库的优化是非常重要的. MySQL支持多种类型,大致可以分为三类:数值.日期/时间和字符串(字符)类型. 数值类型 MySQL支持所有标准S ...

  7. 简单php修改mysql数据类型_MySQL入门很简单—MySQL数据类型

    MySQL入门很简单---MySQL数据类型 一.整数类型: //类型名称字节数(长度)无符号数的取值范围有符号的取值范围 TINYNIT 1 (4)0~255-128~127 SMALLINT2 ( ...

  8. MySQL数据库基础(mysql数据类型、数据表的操作)

    一.MySQL数据类型 1.数值类型 作为SQL标准的扩展,MySQL也支持整数类型TINYINT.MEDIUMINT和BIGINT.下面的表显示了需要的每个整数类型的存储和范围: MySQL数值类型 ...

  9. mysql 数据类型 image_MySQL 数据类型

    1.MySQL 数据类型 MySQL中定义数据字段的类型对你数据库的优化是非常重要的. MySQL支持多种类型,大致可以分为三类:数值.日期/时间和字符串(字符)类型. 2.数值类型(12) 2.1. ...

最新文章

  1. oracle数据库----SQL语句的实践(应用实例)
  2. eeglab中文教程系列(17)-DIPFIT对独立成分进行等价偶极子定位
  3. 案例驱动python编程入门-python ddt数据驱动实例代码分享
  4. hihoCoder 1549 或运算和
  5. 更新Android Studio 3.1.1碰到的问题
  6. Socket支持多用户并发访问的解决办法
  7. 叮,您有一份ML.NET 速查手册请查收!
  8. [蓝桥杯][算法提高VIP]夺宝奇兵-dp
  9. 超实用的JavaScript技巧及最佳实践
  10. 求素数mdp c语言问题,C语言使用深度优先搜索算法解决迷宫问题(堆栈)
  11. algorithm头文件下的fill()
  12. Tensorflow多输入模型构建以及Dataset数据构建
  13. hosts文件位置在哪里?(3种打开hosts文件的方法)
  14. otter实现数据同步,otter manger的安装
  15. FreeRTOS笔记篇:第七章 -- 资源管理(互斥锁、二进制信号量、死锁)
  16. Java实现图书管理小练习(赌包辣条看完绝对会~)
  17. pads单位切换的快捷键_PADS常用快捷键和一些技巧
  18. 《中台产品经理宝典》读后感11:大白话说透时下备受追捧的数字化转型是什么?
  19. 使用Pandas绘制股票均线
  20. comsol如何定义狄利克雷边界_有限元分析(FEA)是个什么东东

热门文章

  1. VTK:交叉点 PolyData 过滤器用法实战
  2. VTK:外部轮廓用法实战
  3. OpenCASCADE绘制测试线束:形状修复命令之转换命令
  4. OpenCASCADE:读IGES
  5. boost::base_from_member相关的测试程序
  6. boost::alignment_of相关的测试程序
  7. boost::safe_numerics::checked_result相关的测试程序
  8. boost::mpl模块back相关的测试程序
  9. boost::hana::equal用法的测试程序
  10. boost::local_time模块custom_time_zone 和 posix_time_zone 的简单示例