先日、久々にDBを扱う機会があって、SQLiteを使用していました。
その際にINTEGER型のカラムにミリ秒タイムスタンプを保存していたのですが、データベースビューアからそのカラムの値を見た時にこんな悲惨なことになっていました...
_人人人人人人人人人人人人人人人人人人人人人人人人_
> 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データソース管理ツール を開き、該当のデータソースを選択して 構成 を押します。

次に、出てきたデータソースのプロパティーで Always BIGINT を有効化します
ちなみに...
Foreign Keys の有効化もここからできます!
SQLiteの場合デフォルトで無効化されているのが落とし穴ですよね...
これでもう一度データベースビューアを開きなおすと...
以上!「ODBC×SQLiteで2147483646に困ったら」でした!


