Mar*_*ius 0 mysql sql delphi sqlite zeos
我正在使用最新的Zeos和SQLite 3.一旦我们创建了所有持久性整数字段,它通常很顺利,从MySQL转换TLargeInt.
但是当我们使用列定义unsigned big int(根据https://www.sqlite.org/datatype3.html允许的唯一无符号类型)时,Delphi会调用结果字段a ftWidestring.
不,它不会"恢复"为字符串,SQlite只是存储提供的数据.
正如文件所述:
SQLite支持列上的"类型亲和性"概念.列的类型亲缘关系是存储在该列中的数据的推荐类型.这里的重要思想是建议使用类型,而不是必需的.任何列仍然可以存储任何类型的数据.根据选择,某些列更倾向于使用一个存储类而不是另一个存储类.列的首选存储类称为"亲和性".
如果提供/绑定文本值,它将存储文本值.没有转换为CREATE TABLE语句中提供的类型,因为它可能出现在其他更严格的RBMS中,例如MySQL.
所以在你的情况下,如果你检索数据ftWideString,我想这是因为你把数据写成TEXT.例如,从MySQL创建SQLite3内容的工具或程序将此列写为TEXT.
关于数字,没有"签名"/"无符号",也没有SQLite3中的精确检查.因此,如果要存储"unsigned big int"值,只需使用INT64,即Int64.
但是,在所有情况下,即使SQLite3 API支持UNSIGNED 64位整数,sqlite3_uint64Zeos/ZDBC API或Delphi也很难支持这种类型(旧版本的Delphi不支持UInt64).可以肯定的是,您应该更好地检索TEXT这样的值,然后UInt64在Delphi代码中手动转换它.
更新:
你使用的TDataSet是Zeos提供的后代吗?此组件绑定DB.Pas,因此需要单个每列类型.它可能是您的代码混淆的根源(您根本没有显示,因此很难弄清楚发生了什么).
您应该更好地使用较低级别的ZDBC接口,该接口允许检索每行的列类型,并根据需要调用值getter方法.
| 归档时间: |
|
| 查看次数: |
887 次 |
| 最近记录: |