我在执行从 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
改用吗?
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 数据类型的更多信息
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 长度。