我在处理插入日期时间值时遇到了一个奇怪的问题。它发生在插入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 |
+--------------------------------------------------------+
一些想法?。我真的需要它存储在数据相关的格式,而不是字符串。提前谢谢
2条答案
按热度按时间vd2z7a6w1#
令人恼火的是,我不能评论,因为我没有足够的代表。
我也看到了同样的问题。运行mysql版本5.7.20。
这将导致
2018-01-00 8:00:00
在table上。可以确认
2018-01-07 21:31:32
是否正确插入为2018-01-07 21:31:32
.我已经看到了通过sqlalchemy和mysql shell插入同一个数据库/表的问题。
8wigbo562#
我不明白为什么你选择的日期类型是'时间戳'。为什么不能简单地用“datetime”?
如果你不能改变,试试看
INSERT INTO test(date) VALUES unix_timestamp("2018-09-07 10:47:47");
我在运行MySQL5.7.19的windows计算机上创建了一个示例:表定义:
然后插入:
最终结果: