首页 > 解决方案 > SQLite 返回 int 而不是 real

问题描述

我正在使用 node js 开发一个网站,并第一次使用 SQLite 作为数据库。

我希望能够对某些表单数据使用实数,并且我注意到一旦进行查询,我的数据库中的每个实数都会转换为整数。

为了对数据库进行可视化,我正在使用 DB Browser,我检查了列是否定义为 REAL,它们是真实的。

如果我尝试在我的数据库中查询 0.1 的数据集,我会得到:

sqlite> select step_variable 
from variables 
where id=38;

0.0

按照建议尝试命令 TYPEOF(step_variable) 后,它返回:

0.0|real

标签: node.jssqlite

解决方案


在 SQLiteCREATE TABLE命令中,定义的是数据类型关联性,而不是数据类型。SQLite 支持以下五列关联:TEXT, NUMERIC, INTEGER, REAL, NONE. 因此,您在创建表时指定的数据类型不会强制执行某种数据类型。您可以提供所需的任何数据类型,甚至可以省略数据类型。

CREATE TABLE table1(
column1 ABC,
column2 Others,
column3 WHATEVER);

CREATE TABLE table2(column1, column2, column3);

填充表:

INSERT INTO table1 VALUES( 1, 'my text', 123.45);
INSERT INTO table2 VALUES( 1, 'my text', 123.45);

现在让我们检查一下 SQLite 用它做了什么:

SELECT column1, TYPEOF(column1) from table1
SELECT column2, TYPEOF(column1) from table1
SELECT column3, TYPEOF(column1) from table1

和:

column TYPEOF(column)
------------------------
1       INTEGER
my text TEXT
123.45  REAL

当您通过查询结果(例如使用 sqlite2_step)时,您可以使用该sqlite3_column_type语句来确认列类型 - 除非您无论如何都知道结果并将结果转换为预期的数据类型。马丁


推荐阅读