写点什么

面试官问:mysql 中时间日期类型和字符串类型的选择

  • 2021 年 11 月 26 日
  • 本文字数:1115 字

    阅读完需:约 4 分钟

摘要:MySQL 中有多种表示时间日期的数据类型,主要有 YEAR、TIME、DATE、DATETIME、TIMESTAMP 等

 

本文分享自华为云社区《一针见血,mysql中时间日期类型和字符串类型的选择》,作者:香菜聊游戏。

一、DATETIME、TIMESTAMP 的用法


MySQL 中有多种表示时间日期的数据类型,主要有 YEAR、TIME、DATE、DATETIME、TIMESTAMP 等



1、相同点


datetime 和 timestamp 都可以表示 YYYY-MM-DDHH:MM:SS 这种年月日时分秒格式的数据。

2、不同点


datetime 存储与时区无关(准备来说是 datetime 只支持一个时区,就是存储时当前服务器的时区),而 timestamp 存储的是与时区有关。


datetime、timestamp 精确度都是秒,datetime 与时区无关,存储的范围广(1001-9999),timestamp 与时区有关,存储的范围小(1970-2038)。

3、选择


TIMESTAMP 和 DATETIME 除了存储范围和存储方式不一样,没有太大区别。当然,对于跨时区的业务,TIMESTAMP 更为合适。

二、varchar 和 text 数据类型的用法


mysql 在存储字符串时,可以使用 char、varchar 或者 text 类型

1、相同点


varchar 和 text 都可以存储变长字符串且字符串长度上限为 65535 字节

2、不同点


varchar 速度快,不存在空间浪费,不处理尾部空格,上限为 65535 字节,但是有存储长度实际 65532 字节最大可用。255 字节以下用 1 字节存储长度,255 字节以上用 2 字节存储长度。 text,存变长大数据,速度慢,不存在空间浪费,不处理尾部空格,上限 65535 字节,会用额外空间存放数据长度,顾可以全部使用 65535 字节。


不能在 TEXT 列上放置索引(全文索引除外),对于 text 来说,只能添加前缀索引,并且前缀索引最大只能达到 1000 字节

text 没有默认值


当 varchar 大于某些数值的时候,其会自动转换为 text,大概规则如下:

大于 varchar(255)变为 tinytext

大于 varchar(500)变为 text

大于 varchar(20000)变为 mediumtext

3、选择


1、经常变化的字段用 varchar;

2、知道固定长度的用 char;

3、超过 255 字节的只能用 varchar 或者 text;

4、能用 varchar 的地方不用 text;

5、能够用数字类型的字段尽量选择数字类型而不用字符串类型,这会降低查询和连接的性能,并会增加存储开销。这是因为引擎在处理查询和连接回逐个比较字符串中每一个字符,而对于数字型而言只需要比较一次就够了;

6、存储引擎对于选择 CHAR 和 VARCHAR 的影响:

  • 对于 MyISAM 存储引擎,最好使用固定长度的数据列代替可变长度的数据列。这样可以使整个表静态化,从而使数据检索更快,用空间换时间。

  • 对于 InnoDB 存储引擎,最好使用可变长度的数据列,因为 InnoDB 数据表的存储格式不分固定长度和可变长度,因此使用 CHAR 不一定比使用 VARCHAR 更好,但由于 VARCHAR 是按照实际的长度存储,比较节省空间,所以对磁盘 I/O 和数据存储总量比较好。


点击关注,第一时间了解华为云新鲜技术~

发布于: 2021 年 11 月 26 日阅读数: 16
用户头像

提供全面深入的云计算技术干货 2020.07.14 加入

华为云开发者社区,提供全面深入的云计算前景分析、丰富的技术干货、程序样例,分享华为云前沿资讯动态,方便开发者快速成长与发展,欢迎提问、互动,多方位了解云计算! 传送门:https://bbs.huaweicloud.com/

评论

发布
暂无评论
面试官问:mysql中时间日期类型和字符串类型的选择