如何使用SQLite十进制精度表示法
再一次,我发现自己对可怕的SQLite文档感到沮丧。
http://www.sqlite.org/datatype3.html给出了一个将十进制字段定义为decimal(10,5)
的示例,但它没有解释10是什么,5是什么。
我确信10是存储的总位数,但我不知道5是什么意思。 它是小数点前或小数点后的位数吗?
该页面说:
在SQLite中,值的数据类型与值本身相关联,而不是与其容器相关联。
这意味着声明的数据类型对可以存储在列中的值没有影响。
该示例解释了DECIMAL(10, 5)
10,5 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
否则,忽略该类型; 您也可以使用DECIMAL(-123, 999999)
FLUFFY BUNNIES
DECIMAL(-123, 999999)
或FLUFFY BUNNIES
。
根据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)
表示该字段应用于存储长度最多为十位的值,小数点前最多五位数,小数点后最多五位数。
当然,输入的任何值都将被存储,即使它不符合这些规则,这意味着字段定义基本上是文档。