sql >> データベース >  >> RDS >> Mysql

unsigned big intを要求すると、Delphi(Zeos)がSQLiteでワイドストリングフィールドを提供するのはなぜですか?

    いいえ、文字列に「戻る」ことはありません。SQliteは、提供されたとおりにデータを保存するだけです。

    ドキュメントの状態

    テキスト値を指定/バインドすると、テキスト値が格納されます。 可能性があるため、CREATETABLEステートメントで指定された型への変換はありません。 他のより厳密なRBMSに表示されます。 MySQL。

    したがって、あなたの場合、データをftWideStringとして取得すると 、これはデータをTEXTとして書き込んだためだと思います。たとえば、MySQLからSQLite3コンテンツを作成するツールまたはプログラムは、この列をTEXTとして書き込んでいます。

    数値については、SQLite3には「符号付き」/「符号なし」も精度チェックもありません。したがって、「unsigned big int」値を格納する場合は、IntEGER(Int64)を使用するだけです。

    ただし、すべての場合において、SQLite3APIはUNSIGNED64ビット整数をサポートします 、このsqlite3_uint64 タイプは、Zeos / ZDBC APIまたはDelphiではほとんどサポートされていない可能性があります(古いバージョンのDelphiはUInt64をサポートしていません)。確かに、TEXTなどの値を取得してから、UInt64として変換することをお勧めします。 Delphiコードで手動で。

    更新:

    TDataSetを使用していますか Zeosによって提供された子孫?このコンポーネントはDB.Pasに関連付けられています 、したがって、列ごとに1つのタイプが必要です。これがコードの混乱の原因である可能性があります(まったく表示しなかったため、何が起こっているのかを理解するのは困難です)。

    各行の列タイプを取得できる低レベルのZDBCインターフェースを使用し、必要に応じて値ゲッターメソッドを呼び出すことをお勧めします。



    1. LinuxでのPHPの実際のmax_execution_time

    2. プリペアドステートメントを使用してSQLテーブルからSELECT*

    3. MySQLのUUIDバージョン1関数の代わりになりますか?

    4. postgresで年ごとに合計された値を使用してテーブルを作成する方法