数据库中 日期的几种表示方法

上周一位客户询问了有关 MySQL 日期类型的问题。
他说他搞混了,数据库时间完全混乱了。
我直接和他讨论了这个问题。

日期类型最简单,仅存储年月日,格式为“2 02 3 -03 -2 5 ”。
保存后,会出现这样的情况。
第一个支持的是1 000,最新的是9 9 9 9 我在做项目的时候,我们有一个2 000年建的老客户数据库。
我在Date类型上遇到了问题,花了我很长时间才弄清楚。

日期/时间有点复杂。
以“2 02 3 -03 -2 5 1 4 :3 0:00”格式保存年、月、日、时、分、秒。
最早支持的日期是 1 000-00-00 00:00:00,最晚日期是 9 9 9 9 -1 2 -3 1 2 3 :5 9 :5 9 当心。
实际上,最早的日期是 00:00。
这特别容易出错。
我的一位同事在编写代码时没有注意。
他把它拿出来并使用 1 0 月 1 日作为默认日期。
结果,数据全错了。

时间戳是最烦人的。
它还存储年、月、日、小时、分钟和秒。
格式与日期/时间相同。
但是,支持的范围是从 1 9 7 0-01 -01 00:00:01 到 2 03 8 -01 -1 9 03 :1 4 :07 最早的日期是 1 9 7 0 年,这是 Unix 时间戳的起点。
2 03 8 年是一个障碍。
超过这个时间就会爆炸,所以现在很多系统已经不再使用时间戳了。

这里重要的是你不应该使用字符串来存储日期!上周一位客户问我这个问题。
字符串占用大量空间,效率低下,并且难以比较。
例如,“2 02 3 -03 -2 5 ”和“2 02 3 /03 /2 5 ”很难比较。
数据库可以自动确定日期/时间和时间戳,但不能自动确定字符串。

DateTime 和 Timestamp 最大的区别就是时区! DateTime 根本不携带时区信息。
它存储的是服务器当前时区的时间。
比如我在北京保存的是北京时间。
如果您连接到纽约的数据库,您看到的是纽约时间。
2 02 3 年,我在上海一家购物中心做一个项目时,遇到了一个美国客户对中国数据库时间感到困惑的情况。

时间戳是智能的,会根据服务器时区自动转换。
在纽约查看时,北京保存的时间将自动更改为纽约时间。
但这是有后果的。
这意味着不同时区的人们可以在不同时间查看相同的记录。
我在东京做一个项目,一位日本同事告诉我为什么时差这么大。

我的建议是,如果您不使用时区,则仅使用日期/时间。
如果需要时区转换,请使用时间戳。
但是,最好不要使用字符串。
我面临的陷阱是我之前的一个项目使用字符串来存储日期,并且报告都是一团糟。
换的时候我的头发都快掉了。

无论如何,这取决于你。

sql server 小时用什么类型

说白了,SQL数据库中的九种主要数据类型其实非常简单。
关键是要了解它们的用途和场景。
我们先来说说最重要的事情。
字符数据,例如 char、varchar 和 text,用于存储字符串。
Char存储固定长度数据,varchar存储可变长度数据。
当需要存储非常大量的字符串时,可以使用nchar、nvarchar和ntext。
它们也存储字符串,但它们使用 Unicode 编码,适合国际网站。

另外一点,日期和时间,datetime和smalldatetime,都保存日期和时间。
datetime可以存储从1 /1 /1 7 5 3 到1 2 /3 1 /9 9 9 9 的时间数据,精确到0.001 秒,而smalldatetime可以存储从1 /1 /1 9 00到6 /6 /2 07 9 的时间数据,精确到秒。

还有另一个重要的细节。
整数数据有几种类型,例如h3int、int、smallint和tinyint,它们可以将整数存储在不同的区域中。
比如h3int可以存储从-2 ^6 3 到2 ^6 3 -1 的整数,而tinyint只能存储从0到2 5 5 的数字。

一开始我以为所有的整数类型都可以存储负数,但后来发现这是错误的。
例如,tinyint 只能存储 0 到 2 5 5 之间的整数。
等等,那是另一回事了。
货币数据 货币和找零用于存储货币数据。
存款时,必须在前面加上货币符号。
如果是负值,则在货币符号后面添加一个符号。

最后,我想提醒您一个容易陷入的陷阱。
位类型数据,例如性别字段,只有两种可能。
在这种情况下,您可以使用位类型。
很多人没有注意到这一点,但我认为值得一试。
如果还有不明白的地方,可以阅读SQL Books Online。

oracle数据库常用字段类型有哪些

哦,我们来谈谈Oracle数据库中的字段类型。
这是科学。
数字类型(例如 NUMBER)是最灵活的。
您可以指定精度和小数位数,例如 NUMBER(1 0,2 ),表示最多 1 0 个数字,其中 2 个是十进制数字。
这适用于需要高精度计算的场景,但精度过高可能会影响性能。
INTEGER是一种占用空间小、效率高的整数类型。
适合存储不带小数的数值。

然后是FLOAT、DOUBLEPRECISION和REAL,它们都是浮点数类型,用于存储带小数的值。
FLOAT 精度较低,DOUBLEPRECISION 精度较高,REAL 介于两者之间。
但是,在比较浮点数时,必须注意精度限制。
建议使用公差范围。

还有更多的字符类型,VARCHAR2 ,它是变长字符串。
存储空间只占用实际字符长度。
它非常节省空间,也是使用最广泛的字符类型之一。
CHAR是定长字符串,无论实际字符长度如何,都占用固定的空间。
适合长度固定需要对齐的场景,但长度不定的数据会浪费空间。
CLOB,大写对象,用于存储非常大的文本数据,例如文章内容。
可以存储4 GB以上的数据,但访问速度有点慢。

NVARCHAR2 和 NCHAR 这两个程序支持 Unicode 字符,适合存储多语言文本。

日期和时间类型也很有趣。
DATE 存储日期和时间,精确到秒,包括年、月、日、时、分、秒。
适合大多数录音场景。
TIMESTAMP比DATE更精确,可以精确到纳秒级别,适合需要高精度时间记录的场景。

其他类型 BOOLEAN,布尔值类型,存储真/假值。
RAW 是一种二进制数据类型,存储非文本数据,例如加密数据。
BLOB,二进制大对象,存储非常大的二进制数据,例如图像和视频。

选择数据类型时,必须注意空间和性能之间的平衡。
太大的数据类型会浪费空间,太小的数据类型可能会导致数据截断或精度损失。
我们还应该注意索引的大量使用。
为经常查询的字段创建索引可以大大提高查询速度,但是索引会占用空间并影响插入和更新数据的速度。

Oracle会自动执行数据类型的隐式转换,但这可能会导致数据精度损失或错误,因此建议使用显式类型转换。
对于允许空值的字段,必须考虑如何处理空值,以避免意外结果。
说实话,当时我没有想过,但现在我有了一个想法。