首页 > 解决方案 > NUMERIC 和 INTEGER 类型在 SQLite 中是否完全相同?

问题描述

SQLite 数据库中的 Numeric 和 Integer 类型是否完全相同?

我对这些类型有些困惑。如果有任何区别,那么有什么区别?

标签: databasesqlitesqldatatypes

解决方案


NUMERIC不是类型(AKA 存储类),它是一个affinityINTEGER既是。

文档(强调添加):

具有 NUMERIC 关联的列可能包含使用所有五个存储类的值。将文本数据插入 NUMERIC 列时,如果文本分别是格式良好的整数或实数文字,则文本的存储类将转换为 INTEGER 或 REAL(按优先顺序)。如果 TEXT 值是格式正确的整数文字,它太大而无法放入 64 位有符号整数,则将其转换为 REAL。对于 TEXT 和 REAL 存储类之间的转换,仅保留数字的前 15 位有效十进制数字。如果 TEXT 值不是格式正确的整数或实数,则该值存储为 TEXT。就本段而言,十六进制整数文字不被视为格式正确,而是存储为 TEXT。(这样做是为了与 3.8 版之前的 SQLite 版本保持历史兼容性。

字符串可能看起来像带有小数点和/或指数表示法的浮点文字,但只要该值可以表示为整数,NUMERIC 亲和性就会将其转换为整数。因此,字符串“3.0e+5”以整数 300000 而非浮点值 300000.0 的形式存储在具有 NUMERIC 亲和性的列中。

使用 INTEGER 亲和性的列的行为与使用 NUMERIC 亲和性的列相同。INTEGER 和 NUMERIC 亲和力之间的差异仅在 CAST 表达式中很明显。

(阅读和理解整个页面及其描述的概念,如亲和力,对于了解 sqlite 的工作原理至关重要。)

规则CAST()过于复杂,无法完整引用,但可以在此处阅读。总而言之,转换为INTEGER将始终返回一个整数,转换为NUMERIC可以返回一个整数或实数值,具体取决于。


推荐阅读