В чем разница между целочисленными типами данных SQLite, такими как int, integer, bigint и т. Д.? - PullRequest
49 голосов
/ 07 сентября 2011

В чем разница между целочисленными типами данных в sqlite?

INT
INTEGER
TINYINT
SMALLINT
MEDIUMINT
BIGINT
НЕ ПОДПИСАНО БОЛЬШОЙ INT
INT2
INT8

Какой из них может хранить 32-разрядные целые числа, а какой - 64-разрядные значения? Есть ли поддержка 128-бит?

Я нахожу, что целочисленный размер данных пока немного сбивает с толку, например, INTEGER может хранить до 64-битных целых чисел со знаком, но значения могут занимать только 32 бита на диске.

Вызов sqlite3_column_int для столбца INTEGER будет работать только в том случае, если сохраненное значение меньше максимального значения int32, как оно будет вести себя, если оно выше?

1 Ответ

55 голосов
/ 07 сентября 2011

Из документации по SQLite3:

http://www.sqlite.org/datatype3.html

Большинство механизмов баз данных SQL (каждый механизм баз данных SQL, кроме Насколько нам известно, SQLite использует статическую жесткую типизацию. Со статическим набирая, тип данных значения определяется его контейнером - определенный столбец, в котором хранится значение.

SQLite использует более общую динамическую систему типов. В SQLite тип данных значения связан с самим значением, а не с его контейнер. Динамическая система типов SQLite обратно совместима с более распространенными системами статических типов других механизмов баз данных в смысл, что оператор SQL, который работает на статически типизированных базах данных должен работать так же в SQLite. Тем не менее, динамический ввод в SQLite позволяет делать то, что невозможно в традиционном жестко типизированные базы данных.

Так, в MS Sql Server (например), "int" == "integer" == 4 байта / 32 бита.

Напротив, целочисленное значение SqlLite может содержать все, что вы в него поместите: от 1-байтового символа до 8-байтового длинного.

Приведенная выше ссылка перечисляет все типы и дает более подробную информацию о Sqlite "affinity".

Интерфейс C / C ++, на который вы ссылаетесь, должен работать со строго типизированными языками.

Итак, есть два API: sqlite3_column_int (), максимум 4 байта; и sqlite3_column_int64 ()

http://www.sqlite.org/capi3ref.html#sqlite3_int64

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...