A5:SQL Mk-2

開発のこと、日々のこと

SQLIte の INTEGER型データ表示

ホーム フォーラム A5:SQL Mk-2掲示板 SQLIte の INTEGER型データ表示

このトピックには5件の返信が含まれ、2人の参加者がいます。2 ヶ月前 薗田 茂雄 さんが最後の更新を行いました。

6件の投稿を表示中 - 1 - 6件目 (全6件中)
  • 投稿者
    投稿
  • #3707 返信

    薗田 茂雄

    このたびSQLiteで初めて、A5:SQL Mk-2を使わせてもらいましたが、SQLiteではINTGEGER型データには64ビット整数をINSERT出来るのですが、A5:SQL Mk-2を通して内容を確認すると、下位32ビット分のみのデータを表示しているようです。

    これはSQLiteに関する制限事項となるのでしょうか?
    64ビットの値をそのまま確認できれば大変ありがたいのですか...。

    現象の確認方法は、SQLite3.exeを使用して以下のような操作で可能です。

    sqlite> .header on
    sqlite> .mode column
    sqlite> CREATE TABLE HolidayTable (Time INTEGER NOT NULL,Content TEXT NOT NULL);
    sqlite> INSERT INTO HolidayTable (Time,Content) VALUES (20190501120000000,’即位の礼’);
    sqlite> SELECT * FROM HolidayTable;

    Time Content
    —————– ———-
    20190501120000000 即位の礼

    sqlite> .exit

    以上の操作で作成されたファイルをA5:SQL Mk-2で開くと、20190501120000000 の部分が、1595424768 と表示されます。

    御検討のほど、宜しくお願い致します。

    #3732 返信

    松原正和
    キーマスター

    薗田 茂雄さんこんにちは。
     
    利用しているDB接続ライブラリUniDACに問題があり、SQLiteで32bitを超える整数値をうまく取得できないようでした。Version 2.14.0 rc 8で修正してみましたのでお試しいただければと思います。

    #3735 返信

    薗田 茂雄

     問題の改修確認できました。

    素早い御対応ありがとうございました。
    これからも愛用させて頂きますので、よろしくお願いします。

    #3765 返信

    薗田 茂雄

    SQLite のデータ型に関してまた別の現象なのですが、今回使用したテーブル作成SQLのINTEGER型 を DATETIME型 に変えて実行すると異なった状況が発生します。

    Version 2.14.0 rc 8で修正していただいた現象とは異なります。
    確認方法は、SQLite3.exeを使用して以下のような操作で可能です。

    sqlite> .header on
    sqlite> .mode column
    sqlite> CREATE TABLE HolidayTable (Time DATETIME NOT NULL,Content TEXT NOT NULL);
    sqlite> INSERT INTO HolidayTable (Time,Content) VALUES (20190501120000000,’即位の礼’);
    sqlite> SELECT * FROM HolidayTable;

    Time Content
    —————– ———-
    20190501120000000 即位の礼

    sqlite> .exit

    以上の操作で作成されたファイルをA5:SQL Mk-2で開くと、下記内容のメッセージボックスが表示されます。
    ‘20190501120000000’ は整数ではありません

    こちらの対応も可能でしょうか?、御検討のほど、宜しくお願い致します。

    #3779 返信

    松原正和
    キーマスター

    薗田 茂雄さんこんにちは。
     
    SQLiteはデータ型の制約が緩く、DATETIME型で列を定義しても、実際のところどんなデータ型も格納できてしまいます。
     
    DATETIME型と定義されている方があった場合、A5:SQL Mk-2はDATATIME型であるとして何とかデータを処理しようとします。数値型が取得された場合、それをユリウス通日またはUnixTimeとして扱おうとしていました。このときに内部的な文字列型から整数型への変換でエラーが起こっていたようでした。
     
    数字表現された日付をユリウス通日として扱うのはSQLite3の標準的な動作のようですが、ユリウス通日として扱えない整数の扱いは定義されていないようです。とりあえず、UnixTimeとして扱うよりyyyyMMddhhmmsszzz表現の整数あるいはその部分文字列として扱うようにしたほうが良いような気がするので次のrc版で修正することにします。

    • この返信は2 ヶ月前に  松原正和 さんが編集しました。
    #3782 返信

    薗田 茂雄

    SQLite のデータ型の扱いが曖昧で縛りが緩いが故の現象ということですね。
    現象に鑑み対応して頂けるのは扱う側の自由度も担保されるので、非常にありがたいことです。
    感謝致します。

6件の投稿を表示中 - 1 - 6件目 (全6件中)
返信先: SQLIte の INTEGER型データ表示
あなたの情報:




コメントは受け付けていません。