MYSQL查询是否使用不同的主键值重复?

MYSQL查询是否使用不同的主键值重复?,mysql,sql,Mysql,Sql,我正在尝试对我的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-钥匙“主要”重复输入“2018-03-30 03:00:00” 请注意,查

我正在尝试对我的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-钥匙“主要”重复输入“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
已解决: 将类型从timestamp更改为datetime,问题得到解决。
谢谢@RaymondNijland

我很确定这是一个时区问题。正如秘书长解释的那样:

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

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


你需要考虑这个补偿。一种解决方案是以UTC为单位提供时间戳。更好的解决方案是使用与时区无关的
datetime

请将您的问题包括
adabtc
表的
CREATE TABLE
语句。还要解释为什么将
time
列设置为主键,以及为什么要添加具有相同
time
值的新行。@Progman查询中的日期与错误中的日期不同是否定义了任何触发器?总之
SHOW CREATE TABLE adabtc
请回答问题。.所有的时间戳实际上都是,以UTC为单位。同时运行查询以在具有正确值的副本前一小时插入,因此它必须向我提供其他信息“所有时间戳实际上都是UTC”@marseladawi我认为您不理解Gordon的意思。。。阅读这篇文章,或多或少地解释了UTC和时区的一切。@marseladawi。问题是MySQL根据服务器时区将不带时区的字符串转换为UTC。你不希望这一切发生。您需要在常量中明确表示时区。或者,使用您真正想要的数据类型,即
datetime
,而不是
timestamp