首页 > 解决方案 > MYSQL查询重复具有不同的主键值?

问题描述

我试图在我的 mysql 数据库上执行以下查询:

INSERT INTO `adabtc` (`time`, `open`, `high`, `low`, `close`, `volume`) VALUES
('2018-03-30 02:00:00','0.00002002', '0.00002031', '0.00002000', '0.00002011', '105.88731690')

我收到以下错误:

1062 - 键“PRIMARY”的重复条目“2018-03-30 03:00:00”

请注意,查询中的日期与重复的日期不同。

创建表:

CREATE TABLE `adabtc` (
 `time` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
 `open` double NOT NULL,
 `high` double NOT NULL,
 `low` double NOT NULL,
 `close` double NOT NULL,
 `volume` double NOT NULL,
 PRIMARY KEY (`time`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1

还运行查询:

SELECT * FROM `adabtc` WHERE time BETWEEN '2018-03-30 01:00:00' AND '2018-03-30 03:00:00'

给我以下结果:

2018-03-30 01:00:00 0.00001983 0.00002003 0.00001968 0.00002001 110.25848914

2018-03-30 03:00:00 0.00002002 0.00002031 0.00002 0.00002011 105.8873169

已解决: 将类型从时间戳更改为日期时间,问题已解决。谢谢@RaymondNijland

标签: mysqlsql

解决方案


我很确定这是一个时区问题。正如文档所解释的:

MySQL 将 TIMESTAMP 值从当前时区转换为 UTC 进行存储,并从 UTC 转换回当前时区进行检索。

假设您的服务器与 UTC 相差一小时,这将解释输入值和错误消息之间的差异。

您需要考虑此偏移量。一种解决方案是以 UTC 格式提供时间戳。更好的解决方案是使用datetime与时区无关的 。


推荐阅读