当前位置: 首页 > article >正文

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

在这里插入图片描述

🎥 作者简介: 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.kler.cn/a/450260.html

相关文章:

  • Android自定义吐司三
  • 【FAQ】HarmonyOS SDK 闭源开放能力 — Vision Kit(2)
  • 远程控制macOS一直卡在100%,能连接上了却只显示了壁纸?
  • 计算机网络——练习题
  • iLoveIMG:强大的在线图片编辑工具分享
  • BERT模型入门(1)BERT的基本概念
  • 《开启微服务之旅:Spring Boot Web开发》(三)
  • Nginx与Tomcat之间的关系
  • Python高性能web框架-FastApi教程:(10)Request对象
  • unity 选择图片点击确定保存,取消则不保存
  • 浅显易懂地介绍 llm.c [译]
  • C++设计模式:中介者模式(聊天室系统)
  • 线性控制算法与非线性控制算法阐述与区分
  • 谷歌浏览器“你使用的是不受支持的命令行标志:--no-sandbox。这会带来稳定性和安全风险。”解决方法
  • NestJS中使用DynamicModule构建插件系统
  • EasyGBS国标GB28181公网平台P2P远程访问故障诊断:云端服务端排查指南
  • 微服务——技术选型与框架
  • PingCAP TiDB数据库专员PCTA认证笔记
  • 【杂谈】-为什么Python是AI的首选语言
  • C# winform 字符串通过枚举类型转成int类型的数据
  • 【全栈实战】基于 Vue3 + Wot Design Uni 动手封装组件
  • 低代码可视化-uniapp进销存销售表单-代码生成器
  • LeetCode 2605 从两个数字数组里生成最小数字
  • Mybatis能执行一对一、一对多的关联查询吗?都有哪些实现方式,以及它们之间的区别
  • Echarts的高级使用,动画,交互api
  • Vue3:uv-upload图片上传