Подтвердить что ты не робот

Типы данных 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)

Любые комментарии, переживания или чувства по этому вопросу?

4b9b3361

Ответ 1

В SQLite типы данных имеют значение, а не столбцы. Поэтому, когда вы вставляете целые числа, они сохраняются как целые числа независимо от типа столбца.

Ответ 2

SQLite автоматически выбирает правильный размер. Из http://www.sqlite.org/datatype3.html:

INTEGER. Значение представляет собой целое число со знаком, сохраненное в 1, 2, 3, 4, 6 или 8 байтах в зависимости от величины значения.

SQLite использует динамические типы и без схемы.

Ответ 3

Посмотрев на выступления и размер созданных баз данных я не могу чтобы увидеть разницу между:

Нет никакой разницы. INTEGER имеет целочисленное сродство, а LONG имеет числовое сродство. И http://www.sqlite.org/datatype3.html говорит:

Столбец, который использует привязку INTEGER ведет себя так же, как столбец с ЧИСЛЕННОЕ сродство. Разница между привязкой INTEGER и NUMERIC проявляется только в выражении CAST.

Ответ 4

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)
);