J. *_*Doe 2 mysql datetime timestamp phpmyadmin
我的数据库中有一列名为time。此列的类型为timestamp,默认值为CURRENT_TIMESTAMP
但是在一些插入之后,phpMyAdmin它在其中将值显示为datetime,例如2019-05-05 04:24:45,甚至在那里也显示了时区并且可以更改!
我以为MySQL的时间戳是4个字节(相比于datetime的8个字节),并且不存储时区,数据与INT(10)相同,例如:(1557094115自1970年以来经过的秒数或类似的东西)
谁能解释一下,是bug还是什么?
MySQL版本5.7.25
这是一TIMESTAMP列,默认值为CURRENT_TIMESTAMP

正如您所看到的那样DATETIME,我无法将它与unix_timestamp的整数值进行比较...也可以将TimeZone更改为任何值(我认为时间戳记不存储时区...)

如果(基于一个答案)MySQL在内部将其存储为整数,那么为什么不能将其与整数进行比较?(以下查询无效)
DELETE FROM `table` WHERE time < UNIX_TIMESTAMP(DATE_SUB(NOW(), INTERVAL :days DAY))
Run Code Online (Sandbox Code Playgroud)
SQLSTATE [22007]:无效的日期时间格式:1292错误的日期时间值:第1行的“时间”列为“ 1555980012”
我也在Sequel Pro和MySQLWorkbench中尝试了相同的结果
如果需要查看1557094115,则将该函数UNIX_TIMESTAMP()应用于TIMESTAMP或DATETIME列。相反是FROM_UNIXTIME()。
mysql> SELECT UNIX_TIMESTAMP("2019-05-05 04:24:45"), FROM_UNIXTIME(1557055485);
+---------------------------------------+---------------------------+
| UNIX_TIMESTAMP("2019-05-05 04:24:45") | FROM_UNIXTIME(1557055485) |
+---------------------------------------+---------------------------+
| 1557055485 | 2019-05-05 04:24:45 |
+---------------------------------------+---------------------------+
Run Code Online (Sandbox Code Playgroud)
更多
为内部存储TIMESTAMP 是在UTC 1557055485; 时区是在获取/存储时添加/删除的。
内部存储DATETIME是(从逻辑上,但实际上不是)字符串“ 2019-05-05 04:24:45”,没有时区提示。(实际上,它以某种方式打包为5个字节。)
无需任何转换功能,获取TIMESTAMP和DATETIME看起来是一样的:
CREATE TABLE `dtts` (
`ts` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
`dt` datetime DEFAULT NULL,
`just_date` date NOT NULL,
`di` int(11) DEFAULT NULL,
`ts_int` int(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_520_ci
1 row in set (0.00 sec)
mysql> select * from dtts
-> ;
+---------------------+---------------------+------------+------------+------------+
| ts | dt | just_date | di | ts_int |
+---------------------+---------------------+------------+------------+------------+
| 2017-06-26 17:52:53 | 2011-06-08 20:45:55 | 2011-06-08 | 20110608 | 1465404577 |
| 2017-06-26 17:52:53 | 2013-03-10 02:35:47 | 2013-03-10 | 20130310 | 1465404577 |
Run Code Online (Sandbox Code Playgroud)
将NOW()两者相加,则SELECTing:
mysql> INSERT INTO dtts (ts, dt) VALUES (NOW(), NOW());
Query OK, 1 row affected, 1 warning (0.00 sec)
| 2019-05-08 14:14:07 | 2019-05-08 14:14:07 | 0000-00-00 | NULL | NULL |
+---------------------+---------------------+------------+------------+------------+
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
299 次 |
| 最近记录: |