mysql 数据库 不同数据类型字段设置长度大小、取值范围 及 存储空间

news2024/12/25 12:34:56

学习目标:

学习的目标

  • 了解不同数据类型字段设置长度大小,从而 在使用 mysql 数据时为使用的字段设置适当的长度 。

学习内容:

学习的内容

  1. 整数型
  2. 字符串型
  3. TEXT
  4. 时间型

总结:

提示:总结

  • 1、整数型

1、整数型的数值类型已经限制了取值范围,有符号整型和无符号整型都有,而M值并不代表可以存储的数值字符长度,它代表的是数据在显示时显示的最小长度;

2、当存储的字符长度超过M值时,没有任何的影响,只要不超过数值类型限制的范围;

3、当存储的字符长度小于M值时,只有在设置了zerofill用0来填充,才能够看到效果,换句话就是说,没有zerofill,M值就是无用的。

举例子,如果你设置int(11),那么有个字段值是123,那么这个值在显示宽度上是3位,而设计的是显示的是11位,所以这时候,你如果在字段设计的时候,选择zerofill就可以发现,123变成了00000000123,也就是剩下的8位用0补足了。

所以我们在设计mysql数据库时,建表时,mysql会自动分配长度:int(11)、tinyint(4)、smallint(6)、mediumint(9)、bigint(20)。

所以,就用这些默认的显示长度就可以了。不用再去自己填长度,比如搞个int(10)、tinyint(1)之类的,基本没用。而且导致表的字段类型多样化。

  • 2、字符串型(CHAR(M)、VARCHAR(M))

在这里插入图片描述

CHAR(M)定义的列的长度为固定的,M取值可以为0~255之间,当保存CHAR值时,在它们的右边填充空格以达到指定的长度。当检索到CHAR值时,尾部的空格被删除掉。在存储或检索过程中不进行大小写转换。CHAR存储定长数据很方便,CHAR字段上的索引效率级高,比如定义char(10),那么不论你存储的数据是否达到了10个字节,都要占去10个字节的空间,不足的自动用空格填充。

VARCHAR(M)定义的列的长度为可变长字符串,M取值可以为0~65535之间,(VARCHAR的最大有效长度由最大行大小和使用的字符集确定。整体最大长度是65,532字节)。VARCHAR值保存时只保存需要的字符数,另加一个字节来记录长度(如果列声明的长度超过255,则使用两个字节)。VARCHAR值保存时不进行填充。当值保存和检索时尾部的空格仍保留,符合标准SQL。varchar存储变长数据,但存储效率没有CHAR高。如果一个字段可能的值是不固定长度的,我们只知道它不可能超过10个字符,把它定义为 VARCHAR(10)是最合算的。

CHAR和VARCHAR最大的不同就是一个是固定长度,一个是可变长度

总结一下,
从空间上考虑,用varchar合适;
从效率上考虑,用char合适,关键是根据实际情况找到权衡点,所有当需要大量查询需求的时候,用char。
当对于保存数据量过大的需求时,为了节省储存空间用varchar。

  • TEXT

最大长度为65,535(2的16次方–1)字符的TEXT列

Text主要是用来存放非二进制的文本,如论坛帖子,题目,或者百度知道的问题和回答之类。TEXT列不能有默认值,存储或检索过程中,不存在大小写转换,后面如果指定长度,不会报错误,但是这个长度是不起作用的,意思就是你插入数据的时候,超过你指定的长度还是可以正常插入。其实可以总结为用来储存大批量的文本信息的时候,使用TEXT。

  • 总结
    1,长度的区别,char范围是0~255,varchar最长是64k,如果遇到了大文本,考虑使用text,最大能到4G。

2,效率来说基本是char>varchar>text

3,char和varchar可以有默认值,text不能指定默认值。

  • 时间型

在这里插入图片描述

DATETIME类型用在你需要同时包含日期和时间信息的值时。MySQL检索并且以’YYYY-MM-DD HH:MM:SS’格式显示DATETIME值,支持的范围是’1000-01-01 00:00:00’到’9999-12-31 23:59:59’。

DATE类型用在你仅需要日期值时,没有时间部分。MySQL检索并且以’YYYY-MM-DD’格式显示DATE值,支持的范围是’1000-01-01’到’9999-12-31’。

TIMESTAMP列类型提供一种类型,你可以使用它自动地用当前的日期和时间标记INSERT或UPDATE的操作。

TIME数据类型表示一天中的时间。MySQL检索并且以"HH:MM:SS"格式显示TIME值。支持的范围是’00:00:00’到’23:59:59’。

- [x] datetime和timestamp的区别:
1.datetime 的日期范围比较大;如果有1970年以前的数据还是要用datetime.但是timestamp 所占存储空间比较小。

2.timestamp 类型的列还有个特性:默认情况下,在 insert, update 数据时,timestamp 列会自动以当前时间(CURRENT_TIMESTAMP)填充/更新。
3.timestamp比较受时区timezone的影响以及MYSQL版本和服务器的SQL MODE的影响。

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

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

相关文章

STM32队列

目录 什么是队列? 队列特点 1. 数据入队出队方式 2. 数据传递方式 3. 多任务访问 4. 出队、入队阻塞 队列相关 API 函数 1. 创建队列 参数: 2. 写队列 参数: 返回值: 3. 读队列 参数: 返回值&#xf…

找工作第一弹——三件套基础巩固

目录 前言HTML篇表格结构a的两种打开方式自定义列表单选,多选音视频标签 CSS篇伪元素清楚浮动固定定位fixedemCSS三角 JS细节篇原型链字符串拼接的方法递归 JS内置对象sort的升序和降序字符串大写和小写Objects对象的方法date的用法数字取整数组的最大值与最小值 We…

ROS中使用VLP16激光雷达获取点云数据

ROS中使用VLP16激光雷达获取点云数据 个人博客地址 本文测试环境为:Ubuntu20.04 ROS Noetic 需要将激光雷达与PC连接,然后在设置>网络>有线中将IPv4改为手动,并且地址为192.168.1.100,子网掩码为255.255.255.0&#xff0c…

leetcode61. 旋转链表(java)

旋转链表 leetcode61. 旋转链表题目描述 解题思路代码演示链表专题 leetcode61. 旋转链表 Leetcode链接: https://leetcode.cn/problems/rotate-list/ 题目描述 给你一个链表的头节点 head ,旋转链表,将链表每个节点向右移动 k 个位置。 示例…

浅析 xml 数据格式文件

浅析 xml 数据格式文件 xml ( Extensible Markup Language ) 全称 -> 可拓展的标记语言; xml文件的主要用途:xml文件主要用于数据的 传输 和 存储,并不是展示; xml标签与html的区别:节点的标签使用方式和 html 十分…

【产品经理】企业的产品增长之路

英特尔前CEO安迪格鲁夫有本书叫做《Only the Paranoid Survive》,全文的中心思想是警示他人,要居安思危,唯有打破常规,不拘泥于现状才能生存。 一、为何企业都在关注增长? 1. 诺基亚的贱卖 13年市值曾位居全球上市公…

HNU-操作系统OS-作业1(4-9章)

这份文件是OS_homework_1 by计科2102 wolf 202108010XXX 文档设置了目录,可以通过目录快速跳转至答案部分。 第四章 4.1用以下标志运行程序:./process-run.py -l 5:100,5:100。CPU 利用率(CPU 使用时间的百分比)应该是多少?为什么你知道这一点?利用 -c 标记查看你…

Spring中如何获取Bean方法上的自定义注解

文章目录 背景描述场景复现问题追踪解决方案扩展思考 背景描述 项目中需要扫描出来所有 标注了自定义注解A的Service里面标注了自定义注解B的方法 来做后续处理。 基本的思路就是通过Spring提供的ApplicationContext#getBeansWithAnnotation反射 来实现。 但是,随…

【Spring】核心与设计思想

哈喽,哈喽,大家好~ 我是你们的老朋友:保护小周ღ 谈起Java 圈子里的框架,最年长最耀眼的莫过于 Spring 框架啦,如今已成为最流行、最广泛使用的Java开发框架之一。不知道大家有没有在使用 Spring 框架的时候思考过这…

11111111111

def cosine_similarity(vector_a, vector_b): “”" 计算两个向量之间的余弦相似度 :param vector_a: 向量 a :param vector_b: 向量 b :return: distance “”" vector_a np.mat(vector_a) vector_b np.mat(vector_b) num float(vector_a * vector_b.T) denom n…

华为OD机试真题 Java 实现【预定酒店】【2022Q4 100分】

一、题目描述 放暑假了,小明决定到某旅游景点游玩,他在网上搜索到了各种价位的酒店(长度为n的 数组A),他的心理价位是x元,请帮他筛选出k个最接近x元的酒店 (n>=k>0) ,并由低到高打印酒店的价格。 二、输入描述 第一行: n,k,x 第二行: A[o] A[1] A[2]…A[n-1] 三…

djiango orm简单实现增删改查

目录 一、配置数据库1.1 在settings.py文件中找到DATABASES ,配置数据库连接,这里用的是mysql 二、切换操作数据库的模块三、 创建一个app并注册3.1创建一个app3.2 注册app 三、在app1定义模型类四、迁移数据库,使用以下命令,生成…

Android修改aar并重新打包

目录 一.修改 aar 需要用到的工具(就一个工具,使用方式非常简单,别担心) 二.修改 aar 代码层业务逻辑 三.修改 aar layout 布局文件 四.附上recyclerview aar修改工程源码 一.修改 aar 需要用到的工具(就一个工具&…

MKS SERVO4257D 闭环步进电机_系列8 CAN通讯示例

第1部分 产品介绍 MKS SERVO 28D/35D/42D/57D 系列闭环步进电机是创客基地为满足市场需求而自主研发的一款产品。具备脉冲接口和RS485/CAN串行接口,支持MODBUS-RTU通讯协议,内置高效FOC矢量算法,采用高精度编码器,通过位置反馈&a…

AD19操作注意事项及信息

直接在PCB编辑界面添加差分对(差分布线) 1.PCB边界界面Panels菜单调出PCB界面 2.选择框中信息,点击添加差分对即可,然后利用交互式差分对布线命令进行布线操作。(前提设置好差分布线规则) 过孔&#xff1a…

7年经验之谈 —— 如何进行渗透测试以提高软件安全性?

对于各种规模的企业和组织来说,软件安全是一个至关重要的问题。随着网络攻击越来越复杂,软件中的漏洞越来越多,确保你的软件安全比以往任何时候都更重要。提高软件安全性的一个有效方法是渗透测试(penetration testing&#xff09…

6月9号软件资讯更新合集....

Vivaldi 6.1 发布,可绕过微软限制使用 Bing Chat 最新版本的 Vivaldi 可在桌面端伪装成 Edge,使其用户受益,并为工作空间和标签增加了更多的功能。 支持微软 Bing Chat Vivaldi 是建立在 Chromium 开源项目之上的。它与 Edge 和 Chrome 使用…

Android kotlin序列化之Parcelable详解与使用(二)

一、介绍 注解序列化篇:Android kotlin序列化之Parcelize详解与使用_蜗牛、Z的博客-CSDN博客 通过上一篇注解序列化,我们已了解的kotlin的序列化比Java复杂了很多。而且有好多问题,注解虽好,但是存在一些问题。 一般在大型商业…

【Flutter】如何更改 Flutter 应用的启动图标

文章目录 一、前言二、什么是启动图标三、为什么我们需要更改启动图标四、如何更改启动图标五、注意事项六、总结 一、前言 欢迎来到 Flutter 的世界!在这篇文章中,我们将探索 Flutter 的一些基础知识。但是,你知道吗?这只是冰山…

爬虫一般怎么解决加密问题?

① 对于网页端来说通常加密的算法是写在 js 代码里的,所以首先你要对 js 语言有所了解。 至少知道 js 基础的内容,其次找到对应 js 加密代码,然后找出关键的函数。 把 js 代码在 node.js 环境进行调试,最后在 Python 环境下利用…