【问题标题】:sqlite typeless columns and storage in .db filesqlite 无类型列和存储在 .db 文件中
【发布时间】:2011-10-17 09:47:28
【问题描述】:

我有一个 SQlite3 表,其中包含如下示例中的无类型列:

CREATE TABLE foo(
  Timestamp INT NOT NULL,
  SensorID,
  Value,
  PRIMARY KEY(Timestamp, SensorID)
);

我有特定的理由不声明SensorIDValue 列的类型。 当插入具有 numeric SensorIDValue 列的行时,我注意到它们以 纯文本 的形式写入 .db 文件中。

当我将CREATE TABLE 语句更改为...

CREATE TABLE foo(
  Timestamp INT NOT NULL,
  SensorID INT,
  Value REAL,
  PRIMARY KEY(Timestamp, SensorID)
);

...然后这些值似乎以某种二进制格式写入 .db 文件。

由于我需要将数百万行写入数据库,我担心这些数据产生的文件大小,因此希望避免以纯文本形式存储值。

我可以强制 SQLite 在其数据库文件中使用二进制表示而不使用显式类型的列吗?

注意:行目前是使用 PHP::PDO 使用准备好的语句编写的。

【问题讨论】:

    标签: sqlite type-conversion


    【解决方案1】:

    sqlite docs about types 中第 3.4 节中的示例演示了在没有显式声明类型的情况下将数字作为 int 插入列中。我想诀窍是省略数字周围的引号,这会将其转换为字符串(在类型列的情况下,它将被强制转换为数字)。

    上面链接页面中的第 2 部分还提供了有关发生的类型转换的大量信息。

    【讨论】:

    • 对。显然,当在 PHP-PDO 中使用准备好的语句时,所有字段都被转义,即使是数字字段。使用不带引号的普通(非准备)查询就可以了。
    猜你喜欢
    • 1970-01-01
    • 2013-12-04
    • 2015-04-27
    • 1970-01-01
    • 1970-01-01
    • 2017-09-18
    • 1970-01-01
    • 2010-11-04
    • 1970-01-01
    相关资源
    最近更新 更多