MySQL时间戳返回日期时间而非整数

4
我有一个MySQL表,其中列_update的类型是timestamp。 我遇到了问题,不明白为什么当我选择这个列时,它返回的是日期时间格式,而不是整数?
在JavaScript中,Unix时间戳以整数形式返回,在PHP中,time()以整数形式返回,但在MySQL中,为什么是日期时间格式?为什么?
我知道可以使用bigint类型,但我想在从phpmyadmin插入数据时向行添加时间戳,并在更新数据时更新时间戳(只能在timestamp类型的列中设置)。

文档中根本没有提到它是Unix时间戳。 - Álvaro González
你有一个timestamp数据类型,除非你对它进行操作使其返回unix_timestamp,否则你会得到一个timestamp作为返回值。 - 1000111
我在config phpmyadmin中有默认设置,但当我插入数据时,在_update中输入的是日期时间格式,而我想要数字值。 - Peter
我找到了两个 SQL 函数来转换数据:UNIX_TIMESTAMP() 和 FROM_UNIXTIME()。 - Peter
1个回答

0

我猜这个疑惑来自于错误的假设,即时间戳总是指Unix时间。然而,它是一个相当通用的英语单词,在IT中被广泛用于不同的与时间相关的概念。

MySQL TIMESTAMP列类型的情况下,虽然它确实是以Unix时间戳的形式存储的:

TIMESTAMP值以自纪元('1970-01-01 00:00:00' UTC)以来的秒数存储。

...但这些细节大多是无关紧要的(因为大多数内部表示都是如此),因为接口与任何其他日期类型相同:以固定的人类可读格式的字符串表示,例如:

'2038-01-19 03:14:07.999999'

而且,就像任何其他日期列类型一样,当您有/需要不同的字符串格式时,您有相应的函数可以进行从/转换为字符串:


但我不明白,为什么类型“时间戳”不返回数字?在许多地方都写着这是秒数,而在许多程序语言中,函数返回秒数,是数字,而不是日期时间 :-) 现在,在我的项目中,我使用这些函数来转换日期时间UNIX_TIMESTAMP()和FROM_UNIXTIME()。 - Peter
这正是我所指的“错误假设时间戳总是指Unix时间”。 - Álvaro González
我曾经遇到过相同的问题,因为“时间戳”这个名称被定义为秒数,我们期望得到整数。但是数据库以“日期时间”格式存储了该数字,这导致在尝试格式化数字时出现混淆。 - Gustavo
@Gustavo,我很乐意纠正或重新表述我的回答中任何不正确的陈述(我不是母语为英语的人,对于“时间戳”一词的含义的假设可能会出现错误),但我找到的链接似乎支持这个想法,即它只是时间信息,甚至不需要是数字。此外,MySQL将此列类型存储为数字。 - Álvaro González

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接