0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【備忘録】SQLite×ODBCで2147483646に困ったら

Last updated at Posted at 2025-06-28

先日、久々にDBを扱う機会があって、SQLiteを使用していました。
その際にINTEGER型のカラムにミリ秒タイムスタンプを保存していたのですが、データベースビューアからそのカラムの値を見た時にこんな悲惨なことになっていました...

32bitに丸められてる図

_人人人人人人人人人人人人人人人人人人人人人人人人_
> 2147483646に丸められちまってるやないか!!! <
 ̄Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y ̄

ということで今回はこれの解決方法について書いていこうと思います。

環境

Windows 11 Home 24H2
LibreOffice 24.2.5.2 (X86_64)
SQLite 3.43.2
SQLite ODBC Driver 1.34455.00.00

私の環境ではデータベースの確認用として、LibreOffice Baseを採用し、ODBCドライバーを経由してSQLiteデータベースに接続していました。

問題の切り分け

まず、ご存知の通り、2147483646は符号付き32bit整数、いわゆるintやint32の最大値なわけです。
そして、もちろんSQLite自体は64bit符号付き整数をサポートしているので、こちらは問題の原因ではなさそうです。

私は念のためPythonのsqliteで確認しましたが、問題なく64bit整数として、丸められることなく保存されていました。

となるとやはりODBCのドライバー側に問題がありそうです。

解決方法

めっちゃ簡単でした

まず ODBCデータソース管理ツール を開き、該当のデータソースを選択して 構成 を押します。
image.png

次に、出てきたデータソースのプロパティーで Always BIGINT を有効化します

ちなみに...
Foreign Keys の有効化もここからできます!
SQLiteの場合デフォルトで無効化されているのが落とし穴ですよね...

image.png

これでもう一度データベースビューアを開きなおすと...

image.png

以上!「ODBC×SQLiteで2147483646に困ったら」でした!

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?