Как использовать нотацию десятичной точности SQLite

Опять же Я нахожу себя разочарованным ужасной документацией SQLite.

http://www.sqlite.org/datatype3.html дает пример определения десятичного поля как decimal(10,5), но он не объясняет, что такое 10 и что 5 есть.

Я уверен, что 10 - это общее количество сохраненных цифр, но я не знаю, что означает 5. Является ли это числом цифр до десятичного места или после десятичной точки?

Ответы

Ответ 1

Согласно 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) мог хранить любое значение с пятью цифрами и двумя десятичными знаками, поэтому значения, которые могут быть сохранены в диапазон зарплаты варьируется от -999,99 до 999,99.

Итак, decimal(10,5) указывает, что поле должно использоваться для хранения значения до десяти цифр в длину, до пяти цифр до десятичной точки и до пяти цифр после десятичной точки.

Конечно, любое введенное значение будет сохранено, даже если оно не соответствует этим правилам, а это означает, что определение поля в основном документально.

Ответ 2

Эта страница говорит:

В 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

В противном случае тип игнорируется; вы также можете использовать DECIMAL(-123, 999999) или FLUFFY BUNNIES.