gpt4 book ai didi

c# - Unsigned int 字段似乎被 System.Data.SQLite 错误地输入到 System.Int32

转载 作者:IT王子 更新时间:2023-10-29 06:26:53 33 4
gpt4 key购买 nike

使用 System.Data.SQLite,我正在创建一个包含无符号整数列的表:

@"CREATE TABLE widgets (" +
@"id unsigned integer(10) PRIMARY KEY, " +
@"fkey unsigned integer(10), " + ...

然后像这样插入值

INSERT INTO widgets (id, fkey, ...) VALUES (4294967295, 3456, ...

但是,遍历该表的行和列我发现 row["id"] 的类型为 System.Int32(而不是 UInt32) 并且,毫不奇怪,4294967295 被解释为 -1。实际上,表中的所有unsigned int字段(不仅主键id被错误键入为System.Int32)

与此同时,SQLite 类型规范指出整数存储在 1、2、3、4、6 或 8 个字节中,具体取决于值的大小。 4294967295 = 0xFFFFFFFF 仅适合四个字节。它似乎也与 SQLite 所谓的“动态类型”不一致。当我插入大于 4294967295 的正值时,类型仍然是 System.Int32

这是错误还是功能?

PS1:

我的表包含 1 行,列 id=2^32-1=4294967295(或更大),我打印所有列的类型

public void PrintDataTypes(DataTable dt) {
foreach (DataRow row in dt.Rows) {
foreach (DataColumn col in dt.Columns)
Console.WriteLine("name={0}, type={1}",
col.ToString(),
row[col].GetType().ToString());
return; // after 1st row is done
}
}

我总是得到

name=id, type=System.Int32
name=fkey, type=System.Int32
...

最佳答案

即使您在 SQL 中指定了 unsigned,您也不会在 SqLite 中获得无符号整数列。是的,我个人认为这是一个明显的缺陷——在您的 SQL 中看到您的“未签名”规范时,它甚至不会输出警告。因此,您的列是 64 位有符号的,您可以存储的最大值确实是 2 的 63 次方。

关于c# - Unsigned int 字段似乎被 System.Data.SQLite 错误地输入到 System.Int32,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20047581/

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