0

次の表を作成しました。

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): 行 1 の列 'quote_av' の値が範囲外です

'quote_av'列の構造を からdecimal(15,8)decimal(30,10)変更しても何も変わらないため、失敗している間はわかりません。

列の順序の問題だと思いましたが、他の投稿で、挿入された値の順序は重要ではないことを読みました。

4

1 に答える 1

2

quote_av は decimal(15,8) です

したがって、次の値は範囲外 (合計桁数が 15 を超える) になります。

2446070334.82879867

この場合、quote_av 構造を次のようにする必要があります。

decimal(18,8)

ただし、他の「より長い」値 (より高い精度) を挿入する場合はfurther increase、x と y を decima(x,y) にする必要があります。

于 2020-12-22T04:06:08.607 に答える