没想到互联网大厂都喜欢问MySQL中的数据类型?

news2024/12/25 1:43:22

在这里插入图片描述

🎥 作者简介: CSDN\阿里云\腾讯云\华为云开发社区优质创作者,专注分享大数据、Python、数据库、人工智能等领域的优质内容
🌸个人主页: 长风清留杨的博客
🍃形式准则: 无论成就大小,都保持一颗谦逊的心,尊重他人,虚心学习。
推荐专栏: Python入门到入魔,Mysql入门到入魔,Python入门基础大全,Flink入门到实战
🍂若缘分至此,无法再续相逢,愿你朝朝暮暮,皆有安好,晨曦微露道早安,日中炽热说午安,星河长明寄晚安🍂

MySQL面试题:为什么不使用字符串存储日期?

面试官提出的问题

面试官:在数据库设计中,我们经常需要存储日期和时间信息。你能否解释一下,为什么我们通常不推荐使用字符串来存储日期和时间,而是更倾向于使用专门的日期类型,比如 DATE、DATETIME 或 TIMESTAMP?

问题的重点

  1. 数据类型对比:理解字符串类型(如 VARCHAR)与日期类型(如 DATE、DATETIME)的区别。
  2. 存储效率:分析不同数据类型在存储空间和检索效率上的差异。
  3. 功能优势:探讨日期类型提供的内置函数和排序、比较等操作的便利性。
  4. 数据完整性:讨论日期类型在数据验证和一致性保证方面的优势。

面试者如何回答

面试者:

  1. 数据类型对比:
    • 字符串类型(如 VARCHAR)用于存储任意文本数据,而日期类型(如 DATE、DATETIME)是专门为日期和时间设计的。
    • 使用字符串存储日期可能导致格式不一致,例如 “2023-10-05” 与 “05/10/2023”,而日期类型则强制统一格式。
  2. 存储效率:
    • 字符串需要额外的存储空间来保存分隔符和可能的额外字符。
    • 日期类型通常使用更紧凑的存储格式,例如 DATE 类型仅占用 3 个字节。
  3. 功能优势:
    • 日期类型支持丰富的内置函数,如 DATE_ADD、DATEDIFF、YEAR()、MONTH() 等,便于日期运算和提取。
    • 日期类型在排序和比较操作上更加高效,因为它们是直接比较的数值(内部表示)。
  4. 数据完整性:
    • 使用日期类型可以自动进行格式验证和错误检查,防止非法日期值(如 “2023-13-01”)被存储。
    • 日期类型还能确保日期的有效范围(例如,不能存储公元前的日期)。

示例

建表
-- 使用字符串存储日期的表
CREATE TABLE events_string (
    id INT AUTO_INCREMENT PRIMARY KEY,
    event_name VARCHAR(255) NOT NULL,
    event_date VARCHAR(10) -- 假设格式为 YYYY-MM-DD
);

-- 使用日期类型存储日期的表
CREATE TABLE events_date (
    id INT AUTO_INCREMENT PRIMARY KEY,
    event_name VARCHAR(255) NOT NULL,
    event_date DATE
);
模拟数据
-- 向 events_string 表中插入数据
INSERT INTO events_string (event_name, event_date) VALUES ('Event A', '2023-10-05');
INSERT INTO events_string (event_name, event_date) VALUES ('Event B', 'invalid-date'); -- 非法日期

-- 向 events_date 表中插入数据
INSERT INTO events_date (event_name, event_date) VALUES ('Event A', '2023-10-05');
-- INSERT INTO events_date (event_name, event_date) VALUES ('Event B', 'invalid-date'); -- 会报错,无法插入非法日期
查询与操作
-- 从 events_string 表中提取年份(需要字符串处理函数)
SELECT event_name, SUBSTRING_INDEX(event_date, '-', 1) AS year FROM events_string;

-- 从 events_date 表中提取年份(使用内置函数)
SELECT event_name, YEAR(event_date) AS year FROM events_date;

-- 比较两个日期(events_string 需要字符串比较,可能不准确)
SELECT * FROM events_string WHERE event_date > '2023-01-01'; -- 可能因格式不一致而出错

-- 比较两个日期(events_date 使用数值比较,准确高效)
SELECT * FROM events_date WHERE event_date > '2023-01-01';
  1. 字符串存储:
    • 插入非法日期时不会报错,可能导致数据不一致。
    • 提取和操作日期需要复杂的字符串处理函数,效率较低。
    • 比较日期时,如果格式不一致,可能导致错误结果。
  2. 日期类型存储:
    • 插入非法日期时会报错,确保数据完整性。
    • 提取和操作日期使用内置函数,简单高效。
    • 比较日期时,直接进行数值比较,准确且高效。

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

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

相关文章

YOLOv8 引入高效的可变形卷积网络 DCNv4 | 重新思考用于视觉应用的动态和稀疏算子

我们介绍了可变形卷积v4(DCNv4),这是一种为广泛的视觉应用设计的高效且有效的算子。DCNv4通过以下两项关键改进解决了其前身DCNv3的局限性: 在空间聚合中移除softmax归一化,以增强其动态特性和表达能力。优化内存访问,减少冗余操作以提高速度。这些改进使得DCNv4相比DCNv…

入侵他人电脑,实现远程控制(待补充)

待补充 在获取他人无线网网络密码后,进一步的操作是实现入侵他人电脑,这一步需要获取对方的IP地址并需要制作自己的代码工具自动化的开启或者打开对方的远程访问权限。 1、获取IP地址(通过伪造的网页、伪造的Windows窗口、hook,信…

C++中的字符串实现

短字符串优化(SSO) 实现1 实现2 写时复制 #define _CRT_SECURE_NO_WARNINGS #include<iostream> #include<cstdio> #include<cstring> #include<cstring> using std::cout; using std::endl;// 引用计数存放的位置 // 1. 存放在栈上 --- 不行 // 2. 存…

clickhouse解决suspiciously many的异常

1. 问题背景 clickhouse安装在虚拟机上&#xff0c;持续写入日志时&#xff0c;突然关机&#xff0c;然后重启&#xff0c;会出现clickhouse可以正常启动&#xff0c;但是查询sql语句&#xff0c;提示suspiciously many异常&#xff0c;如图所示 2. 问题修复 touch /data/cl…

JVM系列(十三) -常用调优工具介绍

最近对 JVM 技术知识进行了重新整理&#xff0c;再次献上 JVM系列文章合集索引&#xff0c;感兴趣的小伙伴可以直接点击如下地址快速阅读。 JVM系列(一) -什么是虚拟机JVM系列(二) -类的加载过程JVM系列(三) -内存布局详解JVM系列(四) -对象的创建过程JVM系列(五) -对象的内存分…

Y3编辑器教程7:界面编辑器

文章目录 一、简介1.1 导航栏1.2 画板1.3 场景界面1.4 控件1.4.1 空节点1.4.2 按钮1.4.3 图片1.4.4 模型1.4.5 文本1.4.6 输入框1.4.7 进度条1.4.8 列表 1.5 元件1.5.1 简介1.5.2 差异说明1.5.3 元件实例的覆盖、还原与禁止操作1.5.4 迷雾控件 1.6 属性1.7 事件&#xff08;动画…

重温设计模式--状态模式

文章目录 状态模式&#xff08;State Pattern&#xff09;概述状态模式UML图作用&#xff1a;状态模式的结构环境&#xff08;Context&#xff09;类&#xff1a;抽象状态&#xff08;State&#xff09;类&#xff1a;具体状态&#xff08;Concrete State&#xff09;类&#x…

MySQL的分析查询语句

【图书推荐】《MySQL 9从入门到性能优化&#xff08;视频教学版&#xff09;》-CSDN博客 《MySQL 9从入门到性能优化&#xff08;视频教学版&#xff09;&#xff08;数据库技术丛书&#xff09;》(王英英)【摘要 书评 试读】- 京东图书 (jd.com) MySQL9数据库技术_夏天又到了…

题解 洛谷 Luogu P1135 奇怪的电梯 广度优先搜索 BFS C/C++

题目传送门&#xff1a; P1135 奇怪的电梯 - 洛谷 | 计算机科学教育新生态https://www.luogu.com.cn/problem/P1135思路&#xff1a; 一道比较裸的 BFS&#xff0c;就是把走迷宫每次搜周围相邻四格&#xff0c;改成了楼层每次搜上下方向的某层而已 感觉这个题难度只有普及- …

git 删除鉴权缓存及账号信息

在Windows系统下 清除凭证管理器中的Git凭据 按下Win R键&#xff0c;打开“运行”对话框&#xff0c;输入control&#xff0c;然后回车&#xff0c;打开控制面板。在控制面板中找到“用户账户”&#xff0c;然后点击“凭据管理器”。在凭据管理器中&#xff0c;找到“Windows…

2024 高频 Java 面试合集整理 (1000 道附答案解析)

2024 年马上就快要过去了&#xff0c;总结了上半年各类 Java 面试题&#xff0c;初中级和中高级都有&#xff0c;包括 Java 基础&#xff0c;JVM 知识面试题库&#xff0c;开源框架面试题库&#xff0c;操作系统面试题库&#xff0c;多线程面试题库&#xff0c;Tcp 面试题库&am…

【图书介绍】】几本Linux C\C++编程图书

Linux C\C编程&#xff0c;是IT领域比较稳定的职业发展方向&#xff0c;本文介绍几本Linux开发方面的图书。 《Linux C与C一线开发实践&#xff08;第2版&#xff09;》 《Linux C与C一线开发实践&#xff08;第2版&#xff09;&#xff08;Linux技术丛书&#xff09;》(朱文…

git命令恢复/还原某个文件、删除远程仓库中的文件

有时刚创建的远程仓库&#xff0c;可能无意中把一些没用的文件上传到仓库&#xff0c;本文介绍一下怎么删除这些文件。 一、git命令恢复某个文件 第一步&#xff1a;拉取最新代码 git pull 第二步&#xff1a; 查看git 修改的文件状态 git status 第三步&#xff1a;查看…

shell脚本定义特殊字符导致执行mysql文件错误的问题

记得有一次版本发布过程中有提供一个sh脚本用于一键执行sql文件&#xff0c;遇到一个shell脚本定义特殊字符的问题&#xff0c;sh脚本的内容类似以下内容&#xff1a; # 数据库ip地址 ip"127.0.0.1" # 数据库密码 cmdbcmdb!#$! smsm!#$!# 执行脚本文件&#xff08;参…

redis数据转移

可能有时候因为硬件的原因我们我们需要更换服务器&#xff0c;如果更换服务器的话&#xff0c;那我们redis的数据该怎样转移呢&#xff0c;按照一下步骤即可完成redis数据的转移 1.进入redis客户端 2.使用 bgsave命令进行数据的备份&#xff0c;此命令完成后会在你的redis安装目…

stm32引脚模式GPIO

问题引入 stm32f103定时器的引脚GPIO_MODE_OUTPUT_PP和GPIO_MODE_AF_PP有什么区别&#xff1f; 在STM32F103微控制器中&#xff0c;使用定时器时涉及到的GPIO配置主要有两种模式&#xff1a;GPIO_MODE_OUTPUT_PP和GPIO_MODE_AF_PP。这两种模式的主要区别在于它们的用途和工作…

Krita安装krita-ai-diffusion工具搭建comfyui报错没有ComfyUI_IPAdapter_plus解决办法

我们在使用Kirta安装krita-ai-diffusion工具之后搭建comfyui环境需要安装很多扩展文件。 一般正常安装都可以使用了。 但是有一个插件很特别,无论你安装多少遍都会显示缺失,是什么插件这么难搞定呢? 没错,就是我们的ComfyUI_IPAdapter_plus插件。 就像下图一样: 那么怎…

WordPress源码解析-数据库表结构

WordPress是一个功能强大的内容管理系统&#xff0c;它使用MySQL数据库来存储和管理网站的内容、用户和配置信息。作为WordPress开发者&#xff0c;了解WordPress数据库的结构和各表的作用至关重要&#xff0c;因为这将帮助您更好地开发插件和主题&#xff0c;以及执行高级数据…

【项目实践】SpringBoot Nacos配置管理 map数据

本文是继续上一篇博客SpringBoot使用Nacos进行application.yml配置管理_nacos application配置-CSDN博客 目录 一、踩坑记录 二、亲测成功 方法一 方法二 一、踩坑记录 参考网上的一些案例&#xff0c;看到网上有人建议 Nacos 可以直接配置成 Map 类型&#xff0c;后台使用…

XILINX平台LINUX下高速ADC08060驱动

前置调研 原理图 AXI-FULL时序 由于项目需要实时性高&#xff0c;采用AXI-FULL接口ADC IP作为master端写入DDR中 引用&#xff1a; AXI_02 AXI4总线简介&#xff08;协议、时序&#xff09;_axi4总线时序-CSDN博客 AXI总线的访问 在ARM架构中&#xff0c;访问I/O地址通常通…