【问题标题】:SQLite C# query doesn' t workSQLite C# 查询不起作用
【发布时间】:2013-02-20 08:50:42
【问题描述】:

我在执行从 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 吗?

【问题讨论】:

  • 究竟有什么区别?我还能在文本字段中存储“最大”数量的字符吗?\
  • 请用您的具体问题更新您的标题..

标签: c# sql sqlite nvarchar


【解决方案1】:

使用TEXT

根据手册,

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

【讨论】:

  • 这是我添加的第二个表,第一个表我确实使用了 nvarchar(32) 等,结果很好,我现在应该在那个查询中使用文本吗?
【解决方案2】:

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

来自FAQ

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

SQLite 不强制 VARCHAR 的长度。你可以声明一个 VARCHAR(10) 和 SQLite 将很乐意让您输入 500 个字符 它。并且它将保持所有 500 个字符不变 - 它永远不会截断

您可以使用TEXT 类型代替。从 here 结帐。

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

【讨论】:

    【解决方案3】:

    SQLite 中只有 5 种数据类型。

    当你使用其中一些时

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

    在创建表语句中,SQLite 将其转换为Text

    还有

    注意类型后面括号中的数字参数 名称(例如:“VARCHAR(255)”)被 SQLite 忽略 - SQLite 不会 施加任何长度限制(除了大的全局 SQLITE_MAX_LENGTH 限制)字符串、BLOB 或数字的长度 价值观。

    SQLite data types

    【讨论】:

      【解决方案4】:

      使用文本! 你可以阅读here 更多关于 sqlite 数据类型的信息

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

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

      注意:

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

      最后:

      字符串或BLOB的最大长度

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

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

      在 SQLite 的部分 INSERT 和 SELECT 处理过程中,完整的 数据库中每一行的内容被编码为单个 BLOB。所以 SQLITE_MAX_LENGTH 参数还确定最大数量 连续字节。

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-04-29
        • 1970-01-01
        • 2017-08-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多