TIMESTAMP类型字段在SQL Server和MySQL中的含义和使用
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了TIMESTAMP类型字段在SQL Server和MySQL中的含义和使用,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2950字,纯文字阅读大概需要5分钟。
内容图文
公众号上转的满天飞的一篇文章,MySQL优化相关的,无意中瞄到一句“尽量使用TIMESTAMP而非DATETIME”,之前对TIMESTAMP也不太熟悉,很少使用,于是查了一下两者的区别。
其实,不管在SQL Server中还是MySQL中,“尽量使用TIMESTAMP而非DATETIME”都是有问题的。
在SQL Server中的TIMESTAMP
SQL Server中,TIMESTAMP是ROWVERSION的同义词,或者说是别名,TIMESTAMP或者ROWVERSION是什么鬼? MSDN上的解释是:数据库中公开的、自动生成的唯一二进制数字的数据类型。参考这里。 两个定语:唯一的,二进制的,说白了就是数据库级别唯一性的一个二进制数据类型 ? SQL Server中TIMESTAMP/ROWVERSION的表现: 1,不可显式插入(或者是更新)。 2,对(包含了)rowversion的表更新非rowversion字段更新的时候,rowversion会自动更新。 3,rowversion在数据库级别具有全局性、递增性、不可回滚性等。 ? 不可显式往timestamp类型字段插入值,只能以default或者默认值的方式插入只能以默认值或者默认生成的方式插入数据
对(包含了)rowversion的表中的数据行更新的时候,rowversion会自动更新。
全局性,这里暂不表述全局性的一些细节问题。
ROWVERSION的作用: 标记数据行的更改,也就是说,一个表包含了ROWVERSION的字段的时候,ROWVERSION字段在数据发生变化(新增,更新)的时候自动更新。 可以根据ROWVERSION来比较不同数据源相同数据行中是否发生了变化,用来做数据同步。比较少使用
MySQL中的TIMESTAMP
在MySQL中:
DATETIME :长度8字节,用来标识包含日期和时间部分的值,MySQL以‘YYYY-MM-DD HH:MM:SS’格式检索并显示DATETIME类型字段。
支持的范围是‘1000-01-01 00:00:00’ to ‘9999-12-31 23:59:59’.
TIMESTAMP :长度4字节,用来标识包含日期和时间部分的值,
支持的范围是 ‘1970-01-01 00:00:01’ (标准时间) to ‘2038-01-19 03:14:07’ (标准时间)。
DATETIME 与TIMESTAMP 的不同:
MySQL将TIMESTAMP类型的值转换为UTC时间存储,当然检索的时候以当前时区的时间返回,下面具体举例,而DATETIME则不会发生这种情况。
同一个字段值,没有发生更改的情况下,也就是同一个值,当修改系统的时区之后,显示出来的结果是不一样的。
这一点正如上面说的:MySQL将TIMESTAMP类型的值转换为UTC时间存储,当然检索的时候以当前时区的时间返回。
貌似转来转去的有点蛋疼,这个特性有什么用处?
这一点对于某些夸时区的应用显示十分有效,最最简单的就是outlook上的收发邮件的时间显示,
比如夸时区的两个人发邮件,发邮件的时间是一个确定的时间,对于A来说,显示自己的时区时间,对于B来说,也是显示为自己时区的时间。
这一点就有点类似于TIMESTAMP,存储为标准时间,根据系统转换为具体的时区时间。
以上,不管在SQL Server中还是MySQL中,DATETIME和TIMESTAMP的作用以及特性都是不同的,SQL Server中尤甚,MySQL也有各自的特性。
选取某种字段类型,是根据需要来的,而不是说可以尽量用那个,尽量不用那个。
数据库中很多东西都是根据具体情况来的,网上总结的很多优化的条条框框,怎么说呢,还是不说了!
参考:
https://dev.mysql.com/doc/refman/5.7/en/datetime.html
https://www.eversql.com/mysql-datetime-vs-timestamp-column-types-which-one-i-should-use/
https://docs.microsoft.com/zh-cn/sql/t-sql/data-types/rowversion-transact-sql?view=sql-server-2017
关于两者的区别,笔者一开始也不完全清楚,我也是各种搜索之后简单总结了一下,无意冒犯原作者。
内容总结
以上是互联网集市为您收集整理的TIMESTAMP类型字段在SQL Server和MySQL中的含义和使用全部内容,希望文章能够帮你解决TIMESTAMP类型字段在SQL Server和MySQL中的含义和使用所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。