Я использую SQLite в JAVA-приложении через Zentus. В этом контексте я должен сохранить и запросить Java long
значения в моей базе данных. При прибытии из другого RDBMS я составил таблицу как после сохранить длинные значения:
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.