node.js - 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
解决方案
在 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
语句来确认列类型 - 除非您无论如何都知道结果并将结果转换为预期的数据类型。马丁
推荐阅读
- django - How to properly serve my Angular application static files from a Django project on Heroku?
- python - dateutil.parser:如何处理同一列中的 dd/mm 和 mm/dd?
- c# - 在两个 ASP.NET Core 2.1 Razor Web 应用程序中将 SignalR 用作集线器和客户端
- login - Joomla 3.6 - 3.7 - 后端白页 - 致命错误 login.php
- bootstrap-tour - 在 bootstrap-tour 中突出显示多个元素
- python - 使用元组创建数据框
- scala - 在 sbt 构建上运行任务
- r - 如何对地理数据进行密度聚类?
- lua - 不寻常的 LUA 函数语法
- java - org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter 类型无法解析