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

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

INT
INTEGER
TINYINT
SMALLINT
MEDIUMINT
BIGINT
НЕЗАВИСИМАЯ БОЛЬШАЯ INT
INT2
INT8

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

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

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

Ответ 1

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

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

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

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

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

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

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

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

Итак, есть два API: sqlite3_column_int(), max 4-байтовый; и sqlite3_column_int64()

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