插入timestamp或datetime在month、day、hour或min为8或9时失败

xriantvc  于 2021-06-21  发布在  Mysql
关注(0)|答案(2)|浏览(362)

我在处理插入日期时间值时遇到了一个奇怪的问题。它发生在插入datetime或timestamp类型的列时,以及使用str\u to\u date函数时。
当月、日、小时或分钟是数字8或9时,数据库似乎无法正确解析。一些例子:

INSERT INTO test(date) VALUES("2018-01-07 10:08:47");

结果:

+----+---------------------+
| id | date                |
+----+---------------------+
|  7 | 2018-01-07 10:00:00 |
+----+---------------------+

现在是今天

INSERT INTO test(date) VALUES("2018-01-08 10:47:47");

结果:

+----+---------------------+
| id | date                |
+----+---------------------+
|  3 | 2018-01-00 8:00:00  |
+----+---------------------+

这个月也失败了:

INSERT INTO test(date) VALUES("2018-09-07 10:47:47");

结果:

+----+---------------------+
| id | date                |
+----+---------------------+
|  9 | 2018-00-00 0:00:00  |
+----+---------------------+

当值不同于8或9时,插入成功:

INSERT INTO test(date) VALUES("2018-01-07 10:47:08")

结果:

+----+---------------------+
| id | date                |
+----+---------------------+
|  8 | 2018-01-07 10:47:08 |
+----+---------------------+

以下是表的说明:

+-------+-----------+------+-----+-------------------+-----------------------------+
| Field | Type      | Null | Key | Default           | Extra                       |
+-------+-----------+------+-----+-------------------+-----------------------------+
| id    | int(11)   | NO   | PRI | null              | auto_increment              |
| date  | timestamp | NO   |     | CURRENT_TIMESTAMP | on update CURRENT_TIMESTAMP |
+-------+-----------+------+-----+-------------------+-----------------------------+

我还用str\u to\u date函数测试了这个问题,得到了相同的结果:

SELECT STR_TO_DATE("10/08/2018 7:47:25", "%d/%m/%Y %k:%i:%s");

+--------------------------------------------------------+
| STR_TO_DATE("10/08/2018 7:47:25", "%d/%m/%Y %k:%i:%s") |
+--------------------------------------------------------+
| 2018-00-00 0:00:00                                     |
+--------------------------------------------------------+

一些想法?。我真的需要它存储在数据相关的格式,而不是字符串。提前谢谢

vd2z7a6w

vd2z7a6w1#

令人恼火的是,我不能评论,因为我没有足够的代表。
我也看到了同样的问题。运行mysql版本5.7.20。

INSERT INTO users (user_id, created_at) VALUES ('user_1', '2018-01-08 21:31:32');

这将导致 2018-01-00 8:00:00 在table上。
可以确认 2018-01-07 21:31:32 是否正确插入为 2018-01-07 21:31:32 .
我已经看到了通过sqlalchemy和mysql shell插入同一个数据库/表的问题。

8wigbo56

8wigbo562#

我不明白为什么你选择的日期类型是'时间戳'。为什么不能简单地用“datetime”?
如果你不能改变,试试看 INSERT INTO test(date) VALUES unix_timestamp("2018-09-07 10:47:47"); 我在运行MySQL5.7.19的windows计算机上创建了一个示例:
表定义:

CREATE TABLE `test_date` (
  `id` INT NOT NULL AUTO_INCREMENT,
  `date_field` DATETIME NULL,
  PRIMARY KEY (`id`));

然后插入:

INSERT INTO test_date(date_field) VALUES("2018-09-07 10:47:47");

最终结果:

id  date_field
1   2018-09-07 10:47:47

相关问题