微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

将记录插入mysql表时出错

如何解决将记录插入mysql表时出错

我创建了下表:

CREATE TABLE IF NOT EXISTS `prices_1d` (
  `symbol` char(50) NOT NULL,`open_time` datetime DEFAULT NULL,`open` decimal(15,8) unsigned DEFAULT NULL,`high` decimal(15,`low` decimal(15,`close` decimal(15,`volume` decimal(15,8) DEFAULT NULL,`close_time` datetime DEFAULT NULL,`quote_av` decimal(15,`Trades` bigint DEFAULT NULL,`tb_base_av` decimal(15,`tb_quote_av` decimal(15,PRIMARY KEY (`symbol`),KEY `symbol` (`symbol`),CONSTRAINT `FK__symbols` FOREIGN KEY (`symbol`) REFERENCES `symbols` (`symbol`) ON UPDATE RESTRICT
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

基于另一个 symbols 列进行键控。

当我想使用以下查询在此 prices_1d 表中插入一条记录时:

INSERT INTO prices_1d (symbol,open,high,low,close,volume,close_time,quote_av,Trades,tb_base_av,tb_quote_av,open_time) 
                    VALUES 
                          ('AAPL',19695.87000000,19888.00000000,18001.12000000,18764.96000000,127698.76265200,'2020-12-01 23:59:59.999000',2446070334.82879867,2023802,63805.39289800,1223282816.31921670,'2020-12-01 00:00:00')
        ON DUPLICATE KEY UPDATE open=19695.87000000,high=19888.00000000,low=18001.12000000,close=18764.96000000,volume=127698.76265200,close_time='2020-12-01 23:59:59.999000',quote_av=2446070334.82879867,Trades=2023802,tb_base_av=63805.39289800,tb_quote_av=1223282816.31921670,open_time='2020-12-01 00:00:00'

我收到以下错误

sql 错误 (1264):第 1 行“quote_av”列的值超出范围

我不明白 'quote_av' 失败了,因为即使将列的结构从 decimal(15,8) 更改为 decimal(30,10) 也没有任何改变。

我认为这与列顺序有关,但我在其他帖子中看到插入值的顺序无关紧要。

解决方法

你的quote_av是十进制(15,8)

因此以下值将超出范围(总位数超过 15 位)

2446070334.82879867

对于这种情况,您将需要 quote_av 结构

decimal(18,8)

但是如果您插入其他“更长”的值(更高的精度),您将需要 further increase decima(x,y) 中的 x 和 y

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。