В чем разница между целочисленными типами данных SQLite, такими как int, integer, bigint и т. д.?

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

INT
Целое число
Тип tinyint
Тип smallint
MEDIUMINT
Типа bigint
UNSIGNED BIG INT
INT2
INT8

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

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

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

1 ответов


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

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

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

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

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

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

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

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

таким образом, есть два API: sqlite3_column_int (), max 4-byte; и sqlite3_column_int64()

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