В чем разница между целочисленными типами данных 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()