【问题标题】:Is NUMERIC and INTEGER types are exaxtly same in SQLite?SQLite 中的 NUMERIC 和 INTEGER 类型是否完全相同?
【发布时间】:2020-03-25 13:39:09
【问题描述】:

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

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

【问题讨论】:

    标签: database sqlite sqldatatypes


    【解决方案1】:

    NUMERIC 不是一个类型(AKA 存储类),它是一个亲和INTEGER 两者兼有。

    来自the documentation(已添加重点):

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

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2019-05-17
      • 2011-03-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多