質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
integer

integerは、一般的に整数を表します。プラスやマイナス、ゼロもなりうる全ての数です。(例 : -2, -1, 0, 1, 2...)

PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

データベース設計

データベース設計はデータベースの論理的や物理的な部分を特定する工程です。

Q&A

解決済

2回答

959閲覧

sequelizeで定義したDBに、2*10の9乗以上のInt型データを格納するとエラーが生じる。この数値未満であれば正常に投稿できる。

shimon_

総合スコア26

integer

integerは、一般的に整数を表します。プラスやマイナス、ゼロもなりうる全ての数です。(例 : -2, -1, 0, 1, 2...)

PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

データベース設計

データベース設計はデータベースの論理的や物理的な部分を特定する工程です。

0グッド

0クリップ

投稿2020/08/28 14:00

前提・実現したいこと

完成イメージは、一日に一度、指定したWebサイトからファイルをDLし、その情報をもとにDBを更新するプログラムです。Node, sequelizeを使用しています。

解決したい問題

どうやら、投稿するInt型データの桁数が、2000000000に至ったときからエラーが生じるようです。上記数字未満であれば正常に更新することができました。

現在、格納したいデータの最大値は10の12乗であり、今後さらに増えていきます。
上記のような大きな数値を格納する方法を教えていただきたいです。
よろしくお願いいたします。

発生している問題・エラーメッセージ

Unhandled rejection SequelizeDatabaseError: value "2994458995" is out of range for type integer

モデル定義

Javascript

1'use strict'; 2const loader = require('./sequelize-loader'); 3const Sequelize = loader.Sequelize; 4 5// define('モデル名',{カラム定義},{オプション設定}); 6const Schedule = loader.database.define('day_info', { 7 id: { 8 type: Sequelize.INTEGER, 9 autoIncrement: true, 10 primaryKey: true 11 }, 12 date: { 13 type: Sequelize.DATE, 14 allowNull: false 15 }, 16 time: { 17 type: Sequelize.INTEGER 18 }, 19 unixTime: { 20 type: Sequelize.BIGINT, 21 allowNull: false 22 }, 23 totalVideos: { 24 type: Sequelize.BIGINT 25 }, 26 totalViews: { 27 type: Sequelize.BIGINT 28 }, 29 totalComments: { 30 type: Sequelize.BIGINT 31 }, 32 diffVideos: { 33 type: Sequelize.BIGINT 34 }, 35 diffViews: { 36 type: Sequelize.BIGINT 37 }, 38 diffComments: { 39 type: Sequelize.BIGINT 40 } 41}, { 42 freezeTableName: true, 43 timestamps: false, 44 }); 45 46module.exports = Schedule;

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

Sequelize.INTEGERは32ビット(符号付き)整数なので、取り得る値は-2,147,483,648~2,147,483,647です。そのデータのtypeをSequelize.BIGINTにして64ビット(符号付き)整数として扱うなり、自分で桁数を指定してDecimalを使うなりしてください。

投稿2020/08/28 14:24

Daregada

総合スコア11990

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

Sequelize.INTEGERは4バイト、Sequelize.BIGINTは8バイトの変数幅なので、それを超える数値は格納できません。

これより桁数が増えるのなら、整数ではなく、文字列として格納してはどうでしょう

投稿2020/08/28 14:16

y_waiwai

総合スコア87774

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問