Ответ 1
В SQLite типы данных имеют значение, а не столбцы. Поэтому, когда вы вставляете целые числа, они сохраняются как целые числа независимо от типа столбца.
Я использую SQLite в приложении Java через Zentus. В этом контексте мне нужно сохранить и запросить значения Java long
в моей базе данных. Исходя из других СУБД, я создал таблицу следующим образом, чтобы сохранить длинные значения:
CREATE TABLE myTable (id INTEGER PRIMARY_KEY, longValue LONG)
Это решение создает исключение, но после чтения документации SQLite для типов данных Я понял, что мой тип long
имеет тот же эффект, что и использование TEXT
= > longValue
сохраняется как текст.
Затем я решил изменить это на INTEGER
(длина которого является переменной и может хранить до 64-битных целых чисел, длина которых длинна Java), чтобы иметь более чистый код и может быть сэкономить некоторое дисковое пространство и увеличивайте производительность, потому что мои longValues вставлены и запрошены как long
.
После сравнения производительности и размера созданных баз данных я не вижу никакой разницы между:
CREATE TABLE myTable (id INTEGER PRIMARY_KEY, longValue LONG)
и
CREATE TABLE myTable (id INTEGER PRIMARY_KEY, longValue INTEGER)
Любые комментарии, переживания или чувства по этому вопросу?
В SQLite типы данных имеют значение, а не столбцы. Поэтому, когда вы вставляете целые числа, они сохраняются как целые числа независимо от типа столбца.
SQLite автоматически выбирает правильный размер. Из http://www.sqlite.org/datatype3.html:
INTEGER. Значение представляет собой целое число со знаком, сохраненное в 1, 2, 3, 4, 6 или 8 байтах в зависимости от величины значения.
SQLite использует динамические типы и без схемы.
Посмотрев на выступления и размер созданных баз данных я не могу чтобы увидеть разницу между:
Нет никакой разницы. INTEGER имеет целочисленное сродство, а LONG имеет числовое сродство. И http://www.sqlite.org/datatype3.html говорит:
Столбец, который использует привязку INTEGER ведет себя так же, как столбец с ЧИСЛЕННОЕ сродство. Разница между привязкой INTEGER и NUMERIC проявляется только в выражении CAST.
CREATE TABLE ex2(
a VARCHAR(10),
b NVARCHAR(15),
c TEXT,
d INTEGER,
e FLOAT,
f BOOLEAN,
g CLOB,
h BLOB,
i TIMESTAMP,
j NUMERIC(10,5)
k VARYING CHARACTER (24),
l NATIONAL VARYING CHARACTER(16)
);