A5:SQL Mk-2

開発のこと、日々のこと

SQLIte の INTEGER型データ表示

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

  • このトピックには5件の返信、2人の参加者があり、最後に薗田 茂雄により5年、 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版で修正することにします。

    • この返信は5年、 2ヶ月前に松原正和が編集しました。
    #3782 返信
    薗田 茂雄
    ゲスト

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

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




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