gpt4 book ai didi

mysql - 为什么 Delphi (Zeos) 在我请求 unsigned big int 时在 SQLite 中给我 widestring 字段?

转载 作者:行者123 更新时间:2023-12-01 00:20:00 25 4
gpt4 key购买 nike

我将最新的 Zeos 与 SQLite 3 一起使用。从 MySQL 转换过来,一旦我们制作了所有持久整数字段TLargeInt,它通常运行良好。

但是当我们使用列定义 unsigned big int(根据 https://www.sqlite.org/datatype3.html 允许的唯一无符号类型)时,Delphi 将结果字段称为 ftWidestring

最佳答案

不,它不会“还原”为字符串,SQlite 只是按提供的方式存储数据。

作为the documentation states :

SQLite supports the concept of "type affinity" on columns. The type affinity of a column is the recommended type for data stored in that column. The important idea here is that the type is recommended, not required. Any column can still store any type of data. It is just that some columns, given the choice, will prefer to use one storage class over another. The preferred storage class for a column is called its "affinity".

如果您提供/绑定(bind)一个文本值,它将存储一个文本值。没有转换为 CREATE TABLE 语句中提供的类型,因为它可能出现在其他更严格的 RBMS 中,例如MySQL。

所以在您的情况下,如果您将数据检索为 ftWideString,我猜这是因为您将数据写入为文本。例如,从您的 MySQL 创建 SQLite3 内容的工具或程序正在将此列写为文本。

关于数字,在 SQLite3 中没有“有符号”/“无符号”,也没有精度检查。所以如果你想存储“unsigned big int”值,只需使用 INTEGER,它是 Int64。

但是,在所有情况下,即使SQLite3 API does support UNSIGNED 64 bit integers , Zeos/ZDBC API 或 Delphi 可能几乎不支持此 sqlite3_uint64 类型(旧版本的 Delphi 不支持 UInt64)。当然,您最好检索 TEXT 等值,然后在您的 Delphi 代码中手动将其转换为 UInt64

更新:

您使用的是 Zeos 提供的 TDataSet 后代吗?此组件与 DB.Pas 相关联,因此需要一个单一的每列类型。这可能是您代码困惑的根源(您根本没有显示,因此很难弄清楚发生了什么)。

您最好使用较低级别的 ZDBC 接口(interface),它允许检索每行的列类型,并根据需要调用值获取方法。

关于mysql - 为什么 Delphi (Zeos) 在我请求 unsigned big int 时在 SQLite 中给我 widestring 字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32689279/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com