Как использовать нотацию десятичной точности 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
.