MySQL实战基础知识入门(13):数据类型

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 2核4GB
简介: MySQL实战基础知识入门(13):数据类型

难得有机会从“积灰这么久,这个当时被你收藏的东西”这个话题,来“温故而知新”。

一、mysql字段类型说明

在MySQL中,有多种数据类型可用于定义表中的字段。以下是一些常见的MySQL字段类型及其说明:

1.数值类型:


INT: 存储整数值,范围为-2147483648到2147483647。

BIGINT: 存储大整数值,范围为-9223372036854775808到9223372036854775807。

FLOAT: 存储单精度浮点数。

DOUBLE: 存储双精度浮点数。

DECIMAL: 存储精确小数值,可以指定精度和标度(例如 DECIMAL(10, 2) 代表精度为10,小数点后保留2位)。

2.字符串类型:


CHAR: 存储固定长度的字符串,最长为255个字符。

VARCHAR: 存储可变长度的字符串,最大长度为65535个字符。

TEXT: 存储可变长度的文本数据,最大长度是65535个字符。

ENUM: 存储枚举类型的值,允许从预定义的值列表中选择一个值。

SET: 存储集合类型的值,允许从预定义的值列表中选择一个或多个值。

3.日期和时间类型:


DATE: 存储日期值(年、月、日)。

TIME: 存储时间值(时、分、秒)。

DATETIME: 存储日期和时间值。

TIMESTAMP: 存储时间戳,用于记录数据的插入和更新时间。

4.布尔类型:


BOOLEAN: 存储布尔值,可以表示真或假。

5.二进制类型:


BLOB: 存储二进制大对象,可以存储大量的二进制数据。

VARBINARY: 存储可变长度的二进制数据。

这些是MySQL中常用的字段类型,每种字段类型具有不同的特性和可接受的值范围。在创建表时,根据数据的性质和需求,选择最合适的字段类型是非常重要的。


二、mysql自增Id的最大值是多少

MySQL自增ID的最大值取决于所使用的数据类型。在MySQL中,常用的自增ID数据类型是INT、BIGINT等。如果使用INT类型,最大值为2147483647。如果使用BIGINT类型,最大值为9223372036854775807。当自增ID达到最大值后,再次插入数据时,会报错并停止自增,需要重新设置自增ID的起始值。


三、int(10)和int(11)的区别

在MySQL中,INT(10)和INT(11)之间的差异主要在于显示宽度,而不是数据类型的本身。事实上,INT(10)和INT(11)在存储和范围方面是完全相同的,都是4个字节的整数类型。


INT(10)和INT(11)中的数字仅指定了在使用零填充的情况下,显示整数时所需的最小位数。例如,INT(10)表示显示时至少以10位宽度进行显示。


但是,这并不会影响存储范围或值的有效性。无论你指定的显示宽度是10还是11,INT类型仍然可以存储范围在-2147483648到2147483647之间的整数值。指定显示宽度主要用于控制输出的美观程度和一致性。


可以通过以下示例看到两者之间的差异:

CREATE TABLE 表名 (
    字段名1 INT(10),
    字段名2 INT(11)
);


在上面的示例中,字段字段名1和字段名2都是INT类型,但字段名1将以最少10位的宽度显示,而字段名2将以最少11位的宽度显示。无论是字段名1还是字段名2,都可以存储相同范围内的整数值。不同的是,当数字在显示时填充不足位数时,字段名2会更宽一些。


总而言之,INT(10)和INT(11)在存储和范围方面没有区别,只是在显示时的宽度上略有差异。选择使用具体的显示宽度主要取决于你希望输出时的一致性和美观程度。


四、varchar(64)和varchar(255)的区别

在MySQL中,VARCHAR(64)和VARCHAR(255)之间的区别主要在于存储空间和存储能力的限制。


1.存储空间:VARCHAR(64)类型可以存储最多64个字符的变长字符串,而VARCHAR(255)类型可以存储最多255个字符的变长字符串。换句话说,VARCHAR(255)可以容纳更长的字符串。


2.存储能力:虽然VARCHAR(64)能够存储较小的字符串,但如果你需要存储更长的文本或内容,VARCHAR(255)提供了更大的存储空间。这使得VARCHAR(255)更适合存储较长的文本字段,例如文章内容或长描述。


需要注意的是,VARCHAR类型是变长字符串类型,它只会使用实际存储的字符数加上一些额外的字节开销来保存字符串数据。因此,无论是VARCHAR(64)还是VARCHAR(255),都只会使用实际存储长度所需的空间,而不会占用固定的存储空间。


当选择VARCHAR(64)或VARCHAR(255)时,要考虑以下因素:


1.数据长度:根据需要存储的具体数据长度,选择合适的VARCHAR长度。如果你确定最大长度不会超过64个字符,可以选择VARCHAR(64)以减少存储空间的浪费。


2.数据类型一致性:如果表中的其他列的VARCHAR长度为255,并且你希望保持一致性,可以选择VARCHAR(255)。


3.性能和优化:长度较短的VARCHAR通常会使用更少的存储空间并且具有更好的性能。如果你的数据长度有限且稳定,可以考虑使用较短的VARCHAR长度。


总结起来,VARCHAR(64)和VARCHAR(255)的主要区别在于存储空间和存储能力的限制。根据数据长度、一致性需求和性能考虑,选择适当的VARCHAR长度。


五、使用整型数储存时间和DATE储存时间的对比

在MySQL中,通常会使用整数类型(如INT或BIGINT)或者日期/时间类型(如DATE、DATETIME或TIMESTAMP)来存储时间数据。下面是使用整数类型和日期/时间类型储存时间的对比:

1.整数类型存储时间:

使用整数类型存储时间的一种常见方法是使用时间戳。时间戳是一个整数值,表示从某个特定时间点(通常是1970年1月1日00:00:00 UTC)计算的秒数。优点包括:


存储效率高:整数类型占用的存储空间较小。

计算方便:可以进行数学运算和比较。

可排序性:可以通过对整数值进行排序来实现按时间排序的功能。

但与整数类型存储时间相关的一些注意事项包括:


可读性差:存储的是数值,无法直接识别为具体的日期和时间。

需要手动处理:需要在应用程序中进行转换和格式化操作才能将整数值转换为可读的日期和时间。

2.日期/时间类型存储时间:

MySQL提供了多种日期/时间类型,如DATE、DATETIME和TIMESTAMP,用于存储日期和时间信息。这些类型具有以下优点:


可读性强:存储的值以易读的日期和时间格式表示。

自动功能:支持自动更新(如CURRENT_TIMESTAMP)和内置函数(如DATE_FORMAT)。

更具语义性:可以直接对日期和时间进行操作,如计算和比较。

在使用日期/时间类型存储时间时需要注意的一些事项包括:


存储空间较大:日期/时间类型占用的存储空间较大,尤其是DATETIME和TIMESTAMP类型。

影响性能:对于高频更新的表,使用TIMESTAMP类型可能会带来额外的开销。

时区问题:日期/时间类型存储的时间值受数据库会话的时区设置影响。

综上所述,如果需要对时间进行复杂的计算、排序和检索,或者要求直接以易读的日期和时间格式进行存储和显示,日期/时间类型是更适合的选择。如果目标是存储效率和可进行自定义计算,或者需要与其他系统(如外部API)进行交互,可能整数类型更合适。具体使用哪种存储方式取决于应用程序的需求和对时间数据的处理方式。



六、如何在前端限制和数据表字段一样的长度

在前端限制用户输入的长度与数据表字段一样,你可以使用以下方法:


1.使用HTML的maxlength属性:对于标签或标签,可以使用maxlength属性来限制用户输入的字符数。例如,如果你的数据表字段长度为64,你可以设置maxlength为64,如下所示:

<input type="text" maxlength="64" />

2.JavaScript限制输入长度:你可以使用JavaScript来限制用户输入的长度并在超出限制时阻止提交表单。可以通过监听输入事件(如input或keydown)来实时计算输入的字符数,并根据字段长度进行处理。以下是一个示例:

<input type="text" id="myInput" />
<span id="charCount"></span>
<script>
  const input = document.getElementById('myInput');
  const charCount = document.getElementById('charCount');
  const maxLength = 64; // 设置字段长度
  input.addEventListener('input', function() {
    const enteredText = input.value;
    charCount.textContent = `${enteredText.length}/${maxLength}`;
    if (enteredText.length > maxLength) {
      input.value = enteredText.slice(0, maxLength); // 截断超出的部分
    }
  });
</script>


这些方法可以在前端实现与数据表字段长度相同的限制。请注意,在前端进行长度验证是为了提供更好的用户体验和实时反馈,但也应该在后端进行验证来确保数据的完整性和安全性。前端验证仅作为辅助手段,后端验证才是最终的保障。


@漏刻有时

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
2月前
|
安全 关系型数据库 MySQL
PHP与MySQL交互:从入门到实践
【9月更文挑战第20天】在数字时代的浪潮中,掌握PHP与MySQL的互动成为了开发动态网站和应用程序的关键。本文将通过简明的语言和实例,引导你理解PHP如何与MySQL数据库进行对话,开启你的编程之旅。我们将从连接数据库开始,逐步深入到执行查询、处理结果,以及应对常见的挑战。无论你是初学者还是希望提升技能的开发者,这篇文章都将为你提供实用的知识和技巧。让我们一起探索PHP与MySQL交互的世界,解锁数据的力量!
|
2月前
|
关系型数据库 MySQL 数据库
MySQL基本操作入门指南
MySQL基本操作入门指南
72 0
|
12天前
|
NoSQL 关系型数据库 MySQL
MySQL与Redis协同作战:优化百万数据查询的实战经验
【10月更文挑战第13天】 在处理大规模数据集时,传统的关系型数据库如MySQL可能会遇到性能瓶颈。为了提升数据处理的效率,我们可以结合使用MySQL和Redis,利用两者的优势来优化数据查询。本文将分享一次实战经验,探讨如何通过MySQL与Redis的协同工作来优化百万级数据统计。
33 5
|
22天前
|
架构师 关系型数据库 MySQL
MySQL最左前缀优化原则:深入解析与实战应用
【10月更文挑战第12天】在数据库架构设计与优化中,索引的使用是提升查询性能的关键手段之一。其中,MySQL的最左前缀优化原则(Leftmost Prefix Principle)是复合索引(Composite Index)应用中的核心策略。作为资深架构师,深入理解并掌握这一原则,对于平衡数据库性能与维护成本至关重要。本文将详细解读最左前缀优化原则的功能特点、业务场景、优缺点、底层原理,并通过Java示例展示其实现方式。
50 1
|
29天前
|
关系型数据库 MySQL 数据库
MySQL数据库基础(数据库操作,常用数据类型,表的操作)
MySQL数据库基础(数据库操作,常用数据类型,表的操作)
33 5
|
6天前
|
监控 关系型数据库 MySQL
数据库优化:MySQL索引策略与查询性能调优实战
【10月更文挑战第27天】本文深入探讨了MySQL的索引策略和查询性能调优技巧。通过介绍B-Tree索引、哈希索引和全文索引等不同类型,以及如何创建和维护索引,结合实战案例分析查询执行计划,帮助读者掌握提升查询性能的方法。定期优化索引和调整查询语句是提高数据库性能的关键。
38 0
|
7天前
|
监控 关系型数据库 MySQL
数据库优化:MySQL索引策略与查询性能调优实战
【10月更文挑战第26天】数据库作为现代应用系统的核心组件,其性能优化至关重要。本文主要探讨MySQL的索引策略与查询性能调优。通过合理创建索引(如B-Tree、复合索引)和优化查询语句(如使用EXPLAIN、优化分页查询),可以显著提升数据库的响应速度和稳定性。实践中还需定期审查慢查询日志,持续优化性能。
34 0
|
1月前
|
存储 关系型数据库 MySQL
MySQL支持多种数据类型
MySQL支持多种数据类型
87 3
|
1月前
|
存储 关系型数据库 MySQL
什么是mysql的数据类型?
什么是mysql的数据类型?
44 2
|
1月前
|
存储 关系型数据库 MySQL
MySQL数据类型
MySQL数据类型
50 2