【MySQL】数据类型(一)

文章目录

  • 前言
  • 一. tinyint等整型
  • 二. bit位字段类型
  • 三. float浮点型
  • 四. decimal浮点型
  • 结束语

前言

MySQL也有数据类型,其中一些与C/C++/Java是一样的,但也有一些数据类型不同,更有新的独有的数据类型

在这里插入图片描述

一. tinyint等整型

MySQL将整型按照字节分成若干种
其中,每个类型的最大最小值因有无符号也有不同

在这里插入图片描述

无符号:create table t1(num tinyint unsigned);
有符号:create table t1(num tinyint);
不携带unsigned默认为有符号

插入数据时,如果超出该类型所能表示的最大最小值,MySQL会直接报错拦截

比如,我们建立一个只含一个tinyint类型的表
如果插入128和-129就会出现如下报错
在这里插入图片描述


在C/C++中,我们可以对char类型的变量赋值超过其表示范围的数据。编译器会进行截断。但这样就无法保证数据的正确性了。
所以在MySQL中,如果插入数据超出表示范围,那么就直接拦截,这样保证数据的合法性和正确性。这也是MySQL约束的一种表现

二. bit位字段类型

bit就是比特位的意思

bie(M) 位字段类型
M表示每个值的位数,范围从1到64,如果M被忽略,默认为1

如果创建表时,使用了比如65,超过bit范围的大小,会出现如下报错

mysql> create table bit_test(-> id int,-> online bit(65)-> );
ERROR 1439 (42000): Display width out of range for column 'online' (max = 64)

创建如下表

mysql> create table bit_test( -> id int,-> online bit(10)-> );
Query OK, 0 rows affected (0.02 sec)

插入若干数据

mysql> insert into bit_test values (123,2);
Query OK, 1 row affected (0.00 sec)mysql> insert into bit_test values (123,3);
Query OK, 1 row affected (0.00 sec)

但是显示时,无法显示online

mysql> select * from bit_test;
+------+--------+
| id   | online |
+------+--------+
|  123 |       |
|  123 |       |
+------+--------+
2 rows in set (0.00 sec)

这是因为bit的显示是按照ASCII码表显示的,如果我们分别插入’a’和97,最后显示的结果都是字符’a’

mysql> insert into bit_test values (123,'a');
Query OK, 1 row affected (0.00 sec)mysql> insert into bit_test values (123,97);
Query OK, 1 row affected (0.01 sec)mysql> select * from bit_test;
+------+--------+
| id   | online |
+------+--------+
|  123 |       |
|  123 |       |
|  123 |  a     |
|  123 |  a     |
+------+--------+
4 rows in set (0.00 sec)

我们可以在显示时将位字段转换成十六进制

mysql> select id,hex(online) from bit_test;
+------+-------------+
| id   | hex(online) |
+------+-------------+
|  123 | 2           |
|  123 | 3           |
|  123 | 61          |
|  123 | 61          |
+------+-------------+
4 rows in set (0.00 sec)

三. float浮点型

float (m,d) [unsigned]
m指定显示长度,d指定小数位数
占用空间位4字节
double与float类似,但是占用空间为8字节

float(4,2)表示数值最长为4个数字,小数点后必须两位
表示范围为-99.99~99.99
如果插入超过表示范围的数据,MySQL同样会进行拦截报错

mysql> create table float_test(-> id int,-> salary float(4,2)-> );mysql> insert into float_test values (1,99.999);
ERROR 1264 (22003): Out of range value for column 'salary' at row 1mysql> insert into float_test values (1,100.0);
ERROR 1264 (22003): Out of range value for column 'salary' at row 1

float类型,在插入时会进行四舍五入
比如:

mysql> insert into float_test values (1,23.456);
Query OK, 1 row affected (0.00 sec)mysql> insert into float_test values (2,55.632);
Query OK, 1 row affected (0.00 sec)mysql> select * from float_test;
+------+--------+
| id   | salary |
+------+--------+
|    1 |  23.46 |
|    2 |  55.63 |
+------+--------+
2 rows in set (0.00 sec)

插入23.456会五入为23.46;插入55.632会四舍为55.63
同时在插入数据时,也要避免四舍五入的影响,比如99.995,在五入后同样会超出范围


float的无符号不会像int整型那样有更大的范围,比如float(4,2) unsigned表示的范围为0.00~99.99
float因为其特殊的存储方式,在存储较大数值的数据时,容易出现误差

mysql> insert into float_test2 values (1,236523627345.2323523);
Query OK, 1 row affected (0.00 sec)mysql> select * from float_test2;
+------+-----------------+
| id   | salary          |
+------+-----------------+
|    1 | 236523634688.00 |
+------+-----------------+
1 row in set (0.00 sec)

四. decimal浮点型

decimal(m,d) [unsigned]
m指定长度,d指定小数点后位数

decimal和float很相似
decimal(4,2)表示范围同样是-99.99~99.99
decimal(4,2) unsigned 可表示0~99.99

但float和decimal表示的精度不同

mysql> create table decimal_test(-> salary1 float(10,8),-> salary2 decimal(10,8)-> );mysql> insert into decimal_test values (23.12345612,23.12345612);
Query OK, 1 row affected (0.00 sec)mysql> select *from decimal_test;
+-------------+-------------+
| salary1     | salary2     |
+-------------+-------------+
| 23.12345695 | 23.12345612 |
+-------------+-------------+
1 row in set (0.01 sec)

float表示的精度大致为7位


decimal在存储较大数据时,也更为的精准

mysql> create table decimal_test2(-> salary1 float,-> salary decimal-> );
Query OK, 0 rows affected (0.02 sec)mysql> insert into decimal_test2 values (123456789.12345,123456789.12345);
Query OK, 1 row affected, 1 warning (0.00 sec)mysql> select * from decimal_test2;
+-----------+-----------+
| salary1   | salary    |
+-----------+-----------+
| 123457000 | 123456789 |
+-----------+-----------+
1 row in set (0.00 sec)

decimal整数最大位数m为65,。支持小数最大位数d是30.如果d被省略,默认为0,如果m被省略了,默认为10
如果希望小数的精度高,或者数值较大,推荐使用decimal

结束语

感谢你的阅读

如果觉得本篇文章对你有所帮助的话,不妨点个赞支持一下博主,拜托啦,这对我真的很重要。
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/142885.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

WPF Frame content binding page(Using MVVM)

前言 这个binding问题困扰了我几天时间了,弄了好的demo试了又试。之前老是认为是ItemsControl中数据模版DataTemplate中绑定Command问题,根据测试没问题。一直在考虑是否是绑定DataContext对象没指明同一个上下文对象问题。最后在MainWindow.xaml文件中F…

buildroot中将编译好的库(Qt,tslib)放入嵌入式linux文件系统

首先交叉编译想使用版本的Qt源码,还有tslib库,编译好之后 再次编译buildroot,再编译好的buildroot中会出现output文件夹,然后output文件夹下有target文件夹,这个target文件夹就是将要打包的文件系统,目标目…

SMOKE-CMAQ实践技术应用

大气污染物排放是空气污染的源头,气象因素是影响污染程度的重要因素,因此空气质量模式要求气象资料和污染物排放清单作为输入,其中由于大气污染源复杂性、数据滞后性、动态变化、规律性不明显等特点,使得大气污染源排放清单输入准…

今天聊一聊高性能系统架构设计是什么样的

Java全能学习面试指南:https://javaxiaobear.cn 今天聊一聊大家常听到的高性能系统架构。 高性能系统架构,主要包括两部分内容,性能测试与性能优化。性能优化又可以细分为硬件优化、中间件优化、架构优化及代码优化,知识架构图如…

【数据结构与算法】链表的实现以及一些基本算法

目录 单选链表的基本实现 有序列表的合并(双指针法) 链表的反转 链表实现两数之和 判定链表是否有环 单选链表的基本实现 public class LinkedList1 {//头节点Node first;//尾节点Node last;//大小int size 0;//头插法public void addFirst(int…

什么才是物联网领域最好的开发语言?

什么才是物联网领域最好的开发语言? 最好!运行最快?开发最高效?最容易学习? 各有特点! 采用C/C语言,运行最快,一般采用厂家提供的底层驱动支持包BSP,所有MCU都支持。如…

selenium自动化测试+OCR-获取图片页面小说

随着爬虫技术的发展,反爬虫技术也越来越高。 目前有些网站通过自定义字体库的方式实现反爬,主要表现在页面数据显示正常,但是页面获取到的实际数据是别的字符或者是一个编码。 这种反爬需要解析网站自己的字体库,对加密字符使用字…

Leetcode算法二叉树—117. 填充每个节点的下一个右侧节点指针 II(层序遍历/队列)

目录 117. 填充每个节点的下一个右侧节点指针 II - 力扣(LeetCode) 题解: 代码: 运行结果: ​编辑 给定一个二叉树: struct Node {int val;Node *left;Node *right;Node *next; } 填充它的每个 next 指…

2023-09-21 buildroot linux 查看应用的log打印信息,命令cat /var/log/messages

一、应用会调用syslog 把打印信息输出到串口,debug 串口会打印kernel的log和上层应用的的log。 二、linux 命令cat /var/log/messages查看应用log

【常用代码15】文字单词超出强制分割换行,word-break: break-all;和word-wrap: break-word;的区别

项目场景: 提示:这里简述项目相关背景: 文件上传后显示文件名,名称过长,超出div 有些文件名如下图 问题描述 提示:这里描述项目中遇到的问题: 一般图片上传,要展示文件名&#x…

基于Springboot实现毕业生信息招聘平台管理系统演示【项目源码+论文说明】分享

基于Springboot实现毕业生信息招聘平台管理系统演示 摘要 随着社会的发展,社会的各行各业都在利用信息化时代的优势。计算机的优势和普及使得各种信息系统的开发成为必需。 毕业生信息招聘平台,主要的模块包括查看管理员;首页、个人中心、企…

预制菜行业数据分析(京东数据挖掘)

最近一段时间,关于预制菜进校园事件的讨论热度高涨。而这两天,核酸大王“张核子”转行开预制菜公司卖方便米饭的消息又被传出,直接让预制菜市场饱受关注。 “预制菜是近两年的风口”,这个结论鲸参谋早在以往的内容中专门讨论过&a…

自学WEB后端03-Node.js 语法

学习后端路线: JavaScript 基础语法 Node,js 内置 API 模块 (fs、 path、 http等) 第三方 API 模块 (express、mysql等) 今天主要回顾下Node.js 语法 Node.js 是基于 Chrome V8 引擎的 JavaScript 运行环境,它提供了一种能够在服务器端运行 JavaScr…

前端求职指南

简历求职指南 为什么没有面试? 1、简历写的不好 2、简历投递不好 简历的定义是什么? 是求职者向未来雇主展示自己专业技能和职业素养的自我推销工具,以找到工作为目的。 什么时候改简历? 每半年或一年更新一次工作中的成长 再工…

Open3D 进阶(12)PCA拟合平面

目录 一、算法原理二、代码实现三、结果展示四、优秀博客本文由CSDN点云侠原创,原文链接。爬虫网站自重。 一、算法原理 本文实现基于主成分分析方法的最小二乘拟合平面。原理如下: 针对整个点云 P = { p i }

torch.sum()——dim参数

dim指在dim的这个维度上,对tesnor 进行求和,如果keepdim(保持维度)False,返回结果会删去dim所指的这个维度。以下面的例子分析dim的参数~ torch.tensor([[[1, 2, 3], [4, 5, 6]], [[7, 8, 9], [10, 11, 12]]]) print(…

如何兼顾性能+实时性处理缓冲数据?

们经常会遇到这样的数据处理应用场景:我们利用一个组件实时收集外部交付给它的数据,并由它转发给一个外部处理程序进行处理。考虑到性能,它会将数据存储在本地缓冲区,等累积到指定的数量后打包发送;考虑到实时性&#…

Linux Ubuntu配置Git的方法

本文介绍在Linux操作系统的Ubuntu版本中,配置分布式开源版本控制系统Git,随后基于Git克隆GitHub中项目的代码的详细方法。 在之前的文章分布式版本控制系统Git的下载、安装与使用其复制GitHub项目代码的方法(https://blog.csdn.net/zhebushib…

区块链实验室(27) - 区块链+物联网应用案例

分享最新的区块链物联网应用案例:HPCLS-BC