mysql 高性能日期比较,高性能MySQL:日期和时间类型

高性能MySQL:日期和时间类型以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

e237feff00f5bb846f4ae89531e1665f.png

日期和时间类型

MySQL 可以使用许多类型来保存日期和时间值 例如YEAR 和DATE MySQL 能存储的最小时间粒度为秒(MariaDB 支持微秒级别的时间类型) 但是MySQL 也可以使用微秒级的粒度进行临时运算 我们会展示怎么绕开这种存储限制

大部分时间类型都没有替代品 因此没有什么是最佳选择的问题 唯一的问题是保存日期和时间的时候需要做什么 MySQL 提供两种相似的日期类型 DATETIME 和TIMESTAMP 对于很多应用程序 它们都能工作 但是在某些场景 一个比另一个工作得好 让我们来看一下

DATETIME

这个类型能保存大范围的值 从 年到 年 精度为秒 它把日期和时间封装到格式为YYYYMMDDHHMMSS 的整数中 与时区无关 使用 个字节的存储空间

默认情况下 MySQL 以一种可排序的 无歧义的格式显示DATETIME 值 例如 : : 这是ANSI 标准定义的日期和时间表示方法

TIMESTAMP

就像它的名字一样 TIMETAMP 类型保存了从 年 月 日午夜(格林尼治标准时间)以来的秒数 它和UNIX 时间戳相同 TIMESTAMP 只使用 个字节的存储空间 因此它的范围比DATETIME 小得多 只能表示从 年到 年 MySQL 提供了FROM_UNIXTIME() 函数把Unix 时间戳转换为日期 并提供了UNIX_TIMESTAMP() 函数把日期转换为Unix 时间戳

MySQL 以及更新的版本按照DATETIME 的方式格式化TIMESTAMP 的值 但是MySQL 以及更老的版本不会在各个部分之间显示任何标点符号 这仅仅是显示格式上的区别 TIMESTAMP 的存储格式在各个版本都是一样的

TIMESTAMP 显示的值也依赖于时区 MySQL 服务器 操作系统 以及客户端连接都有时区设置

因此 存储值为 的TIMESTAMP 在美国东部时区显示为 : : 与格林尼治时间差 个小时 有必要强调一下这个区别 如果在多个时区存储或访问数据 TIMESTAMP 和DATETIME 的行为将很不一样 前者提供的值与时区有关系 后者则保留文本表示的日期和时间

TIMESTAMP 也有DATETIME 没有的特殊属性 默认情况下 如果插入时没有指定第一个TIMESTAMP 列的值 MySQL 则设置这个列的值为当前时间注 在插入一行记录时 MySQL 默认也会更新第一个TIMESTAMP 列的值(除非在UPDATE 语句中明确指定了值) 你可以配置任何TIMESTAMP 列的插入和更新行为 最后 TIMESTAMP 列默认为NOT NULL 这也和其他的数据类型不一样

除了特殊行为之外 通常也应该尽量使用TIMESTAMP 因为它比DATETIME 空间效率更高 有时候人们会将Unix 时间截存储为整数值 但这不会带来任何收益 用整数保存时间截的格式通常不方便处理 所以我们不推荐这样做

如果需要存储比秒更小粒度的日期和时间值怎么办? MySQL 目前没有提供合适的数据类型 但是可以使用自己的存储格式 可以使用BIGINT 类型存储微秒级别的时间截 或者使用DOUBLE 存储秒之后的小数部分 这两种方式都可以 或者也可以使用MariaDB替代MySQL

返回目录高性能MySQL

编辑推荐

ASP NET MVC 框架揭秘

Oracle索引技术

ASP NET开发培训视频教程 lishixinzhi/Article/program/MySQL/201311/29684

分页:123

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值