#mysql #sql-insert #on-duplicate-key #mysql-error-1264
#mysql #sql-вставка #on-duplicate-key #mysql-ошибка-1264
Вопрос:
Я создал следующую таблицу:
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,8) unsigned DEFAULT NULL,
`low` decimal(15,8) unsigned DEFAULT NULL,
`close` decimal(15,8) unsigned DEFAULT NULL,
`volume` decimal(15,8) DEFAULT NULL,
`close_time` datetime DEFAULT NULL,
`quote_av` decimal(15,8) DEFAULT NULL,
`trades` bigint DEFAULT NULL,
`tb_base_av` decimal(15,8) DEFAULT NULL,
`tb_quote_av` decimal(15,8) DEFAULT NULL,
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): значение вне диапазона для столбца ‘quote_av’ в строке 1
Я не понимаю, пока это не удается 'quote_av'
, поскольку даже изменение структуры столбца с decimal(15,8)
на decimal(30,10)
ничего не меняет.
Я думал, что это будет вопрос порядка столбцов, но я читал в других сообщениях, что порядок вставляемых значений не должен иметь значения.
Ответ №1:
Вы цитируете значение av_av десятичное (15,8)
Таким образом, следующее значение будет вне диапазона (всего более 15 цифр)
2446070334.82879867
В этом случае вам потребуется, чтобы структура quote_av была
decimal(18,8)
но если вы вставляете другие «более длинные» значения (с более высокой точностью), вам понадобятся further increase
x и y в decima (x, y)
Комментарии:
1. Большое спасибо! Действительно, я воссоздал таблицу с новым десятичным форматом, и это сработало 🙂