Ошибка при вставке записи в таблицу 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,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) ничего не меняет.

Я думал, что это будет вопрос порядка столбцов, но я читал в других сообщениях, что порядок вставленных значений не должен иметь значения.

Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
В предыдущем посте мы создали функциональность вставки и чтения для нашей динамической СУБД. В этом посте мы собираемся реализовать функции обновления...
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
Роли и разрешения пользователей без пакета Laravel 9
Роли и разрешения пользователей без пакета Laravel 9
Этот пост изначально был опубликован на techsolutionstuff.com .
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
0
0
184
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Ваша цитата_av десятичная (15,8)

Таким образом, следующее значение будет вне диапазона (всего более 15 цифр)

2446070334.82879867

В этом случае вам понадобится структура quote_av.

decimal(18,8)

но если вы вставите другие «более длинные» значения (более высокая точность), вам нужно будет further increase x и y в десятичной системе (x, y)

Большое спасибо! Действительно, я воссоздал таблицу с новым десятичным форматом, и это сработало :)

JejeBelfort 22.12.2020 05:20

Другие вопросы по теме