我是一个数据库新手,正在查看似乎将文本存储在整数列中的 SQLite 数据库。这是 sqlite3 命令行中的示例会话:
sqlite> .schema mytable
CREATE TABLE mytable (
id integer primary key, /* 0 */
mycol integer not null, /* 1 */
);
sqlite> SELECT mycol FROM mytable;
here is some text
here is more text
[...]
it's text all the way down
Run Code Online (Sandbox Code Playgroud)
我糊涂了。是什么赋予了?
我正在使用导入向导加载文本文件,并且需要整数字段中的空白为空,但只插入零。
如何正确导入?
由于 PostgreSQL 没有 1 字节的tinyint,所以第二好的选择是smallint。然而,我从各种帖子中读到,它实际上可能会更慢,因为 CPU 已针对 32 位整数进行了优化,或者可能存在到 32 位整数的隐式转换。
除了这些原因之外,是否还有其他我不知道的不使用小于 32 位整数的原因?
尝试这个:
create table test (f float);
insert into test values (330.0);
commit;
select (8 + 330.0/60)::int; --14
select (8 + f/60)::int from test; --14
select (9 + 330.0/60)::int; --15
select (9 + f/60)::int from test; --14
Run Code Online (Sandbox Code Playgroud)
有人可以解释为什么最后一个查询返回 14 而不是 15 吗?
PostgreSQL 9.3.9 on x86_64-unknown-linux-gnu, compiled by gcc (Ubuntu/Linaro 4.6.3-1ubuntu5) 4.6.3, 64-bit
12.04.5 LTS (GNU/Linux 3.2.0-63-virtual x86_64)
Run Code Online (Sandbox Code Playgroud) 我有一个用户使用的软件有时会将 UNIT 的 ID 作为整数(例如 1000)发回,有时会附加一个小十进制值(例如 1000.001)。该软件会自动生成具有“真实”数据类型的 MSSQL (2016 SP1) 表,并且“最重要”使此 UNIT 列成为主键的一部分。这会导致数据输入端和报告端出现问题。
我意识到这确实是软件的一个“错误”,但我试图在数据库方面提供帮助。我已经在沙盒区域证明我可以将“真实”数据类型更改为“int”,这不会导致现有数据丢失数据,并且每个输入场景都显示任何输入的十进制值将在“int”列(未四舍五入)。
我的问题是,“当输入到“int”数据类型时,SQL Server 是否总是可靠地截断十进制值(我们没有办法深入到打包的应用程序中并强制将其转为 ROUND)?是否有任何情况会出错,或引起问题?” 我在任何地方都找不到此文档。