1

我在执行从 C# 到 SQLite DB 的查询时遇到问题,我使用以下查询,它给了我一个错误:“max”。

create table ClockMessages (ID int identity(1, 1) primary key, InsertDateTime DateTime not null, SendDateTime DateTime, Data nvarchar(max));

我不能使用该nvarchar格式,我应该TEXT改用吗?

4

4 回答 4

1

使用TEXT.

根据说明书,

TEXT- 该值是一个文本字符串,使用数据库编码(UTF-8、UTF-16BE 或 UTF-16LE)存储。

于 2013-02-20T08:54:53.730 回答
1

SQLitevarchar在声明类型时不使用大小。

来自常见问题

(9) SQLite 中 VARCHAR 的最大大小是多少?

SQLite不强制VARCHAR 的长度。您可以声明一个 VARCHAR(10),SQLite 很乐意让您在其中放入 500 个字符。并且它将保持所有 500 个字符的完整性——它永远不会被截断

您可以使用TEXT类型代替。从这里退房。

文本。该值是一个文本字符串,使用数据库编码(UTF-8、UTF-16BE 或 UTF-16LE)存储。

于 2013-02-20T08:56:47.790 回答
1

SQLite 中只有 5 种数据类型。

当你使用其中一些

CHARACTER(20)
VARCHAR(255)
VARYING CHARACTER(255)
NCHAR(55)
NATIVE CHARACTER(70)
NVARCHAR(100)
TEXT
CLOB

在 create table 语句中,SQLite 将其转换为Text

请注意,类型名称后面的括号中的数字参数(例如:“VARCHAR(255)”)会被 SQLite 忽略 - SQLite 不会对字符串、BLOB 或数值。

SQLite 数据类型

于 2013-02-20T08:57:55.810 回答
0

使用文本!您可以在此处阅读有关 sqlite 数据类型的更多信息

TEXT =>该值是一个文本字符串,使用数据库编码(UTF-8、UTF-16BE 或 UTF-16LE)存储。

SQLite 使用更通用的动态类型系统。在 SQLite 中,值的数据类型与值本身相关联,而不是与其容器相关联。SQLite 的动态类型系统向后兼容其他数据库引擎的更常见的静态类型系统,因为在静态类型数据库上工作的 SQL 语句应该在 SQLite 中以相同的方式工作。然而,SQLite 中的动态类型允许它完成传统刚性类型数据库中不可能完成的事情。

这指出:

SQLite 不对字符串、BLOB 或数值的长度施加任何长度限制(除了大的全局 SQLITE_MAX_LENGTH 限制)。

最后:

字符串或 BLOB 的最大长度

SQLite 中字符串或 BLOB 中的最大字节数由预处理器宏 SQLITE_MAX_LENGTH 定义。该宏的默认值为 10 亿(1 亿或 1,000,000,000)。您可以使用如下命令行选项在编译时提高或降低此值:

-DSQLITE_MAX_LENGTH=123456789 当前的实现只支持长度为 231-1 或 2147483647 的字符串或 BLOB。一些内置函数,如 hex() 可能在此之前就失败了。在对安全敏感的应用程序中,最好不要尝试增加最大字符串和 blob 长度。事实上,如果可能的话,最好将最大字符串和 blob 长度降低到几百万的范围内。

在 SQLite 的部分 INSERT 和 SELECT 处理期间,数据库中每一行的完整内容被编码为单个 BLOB。所以 SQLITE_MAX_LENGTH 参数也决定了一行的最大字节数。

可以使用 sqlite3_limit(db,SQLITE_LIMIT_LENGTH,size) 接口在运行时降低最大字符串或 BLOB 长度。

于 2013-02-20T08:55:23.330 回答