database - NUMERIC 和 INTEGER 类型在 SQLite 中是否完全相同?
问题描述
SQLite 数据库中的 Numeric 和 Integer 类型是否完全相同?
我对这些类型有些困惑。如果有任何区别,那么有什么区别?
解决方案
NUMERIC
不是类型(AKA 存储类),它是一个affinity。INTEGER
既是。
从文档(强调添加):
具有 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
可以返回一个整数或实数值,具体取决于。
推荐阅读
- oracle - Oracle 约束 - 比较两个字符串两次
- angular - 如何以角度呈现api数据?
- machine-learning - 使用 RobustScaler 时,您应该转换 y train 吗?
- exception - ESP8266 在向服务器发出第二次请求后重启(异常 9)
- firebase - Flutter 中的 Firebase Admob:即使广告正在加载,也要处理广告
- git - 如何使用 git 从 GitHub 中的远程仓库中删除提交?
- angular - 用于检查路线是否有状态的角度守卫
- c - malloc 函数返回指向数组的指针吗?
- reactjs - Next.js 添加 slug/params 以清理 URL
- java - 如何使用 OnTouch 移动事件将 Android Studio 中的 ImageView 旋转到中心点?