如何使用SQLite十进制精度表示法

cja*_*cja 28 sqlite

再次发现自己对可怕的SQLite文档感到沮丧.

http://www.sqlite.org/datatype3.html给出了一个定义十进制字段的示例,decimal(10,5)但它没有解释10是什么,5是什么.

我确信10是存储的总位数,但我不知道5是什么意思.它是小数点或小数点的位数吗?

CL.*_*CL. 31

那页说:

在SQLite中,值的数据类型与值本身相关联,而不是与其容器相关联.

这意味着声明的数据类型对可以存储在列中的值没有影响.

该示例解释了DECIMAL(10, 5)列具有数字亲和性,即存储在该列中的值最好是数字:

> CREATE TABLE MyTable(X DECIMAL(10, 5));
> INSERT INTO MyTable VALUES (1), ('2'), (1.23456789), ('hello'), (x'42');
> SELECT X, typeof(X) FROM MyTable;
1           integer
2           integer
1.23456789  real
hello       text
B           blob
Run Code Online (Sandbox Code Playgroud)

否则,忽略该类型; 你也可以使用DECIMAL(-123, 999999),或者FLUFFY BUNNIES.

  • 那么您是说十进制(1,1)与十进制(99,53)相同吗? (2认同)
  • 是(由于亲和力的变化除外,例如示例中的字符串''2'.). (2认同)
  • 好的,现在我知道十进制定义基本上是提示性文档。请您告诉我如何正确编写?例如我原来的问题 (2认同)

cja*_*cja 30

根据http://www.sqlite.org/datatype3.html

[decimal是几个中的一个]来自更传统的SQL实现的常见数据类型名称被转换为[SQLite]亲和力

(亲和力与SQLite具有的数据类型的概念差不多.请阅读http://www.sqlite.org/datatype3.html以获取更多相关信息.)

通过这种逻辑,使用MySQL的文档来解释SQLite十进制精度表示法似乎是安全的.

根据http://www.sqlite.org/datatype3.html

标准SQL要求DECIMAL(5,2)能够存储五位数和两位小数的任何值,因此可存储在salary列中的值范围为-999.99到999.99.

因此,decimal(10,5)表示该字段应用于存储长度最多为十位的值,小数点前最多五位,小数点后最多五位.

当然,输入的任何值都将被存储,即使它不符合这些规则,这意味着字段定义基本上是文档.

  • 更新:从版本 3.37.0 (2021-11-27) 开始,SQLite 为喜欢这种类型的开发人员提供了执行严格类型强制的 STRICT 表。然而,SQLite 中的动态类型允许它做传统严格类型数据库中不可能完成的事情。 (2认同)