Quelle est la différence entre les types de données SQLite integer comme int, integer, bigint,etc.?

Quelle est la différence entre les types de données entières dans sqlite?

INT
Entier
TINYINT
SMALLINT
MEDIUMINT
BIGINT
UNSIGNED BIG INT
INT2
INT8

Lequel peut stocker des entiers 32 bits et lequel peut stocker des valeurs 64 bits? Existe-t-il un support pour 128 bits?

Je trouve la taille des données entières un peu déroutante pour l'instant, INTEGER par exemple peut stocker jusqu'à des entiers signés 64 bits, mais les valeurs peuvent occuper seulement 32 bits sur le disque.

Appeler sqlite3_column_int sur une colonne entière ne fonctionnera que si la valeur stockée est inférieure à la valeur int32 max, comment se comportera-t-elle si elle est supérieure?

46
demandé sur chrki 2011-09-07 21:16:57

1 réponses

À partir de la documentation SQLite3:

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

La plupart des moteurs de base de données SQL (chaque moteur de base de données SQL autre que SQLite, pour autant que nous sachions) utilise un typage statique et rigide. De l'électricité statique en tapant, le type de données d'une valeur est déterminé par son colonne particulière dans laquelle la valeur est stockée.

SQLite utilise un système de type dynamique plus général. Dans SQLite, l' le type de données d'une valeur est associé à la valeur lui-même, pas avec ses conteneur. Le système de type dynamique de SQLite est rétrocompatible avec les systèmes de type statique les plus courants d'autres moteurs de base de données dans le sens que l'instruction SQL qui fonctionne sur des bases de données statiquement typées devrait fonctionner de la même manière dans SQLite. Cependant, le typage dynamique SQLite lui permet de faire des choses qui ne sont pas possibles en traditionnel bases de données dactylographiées de manière rigide.

Ainsi, dans MS Sql Server (par exemple), un " int "= = "integer" = = 4 octets / 32 bit.

En revanche, un "entier" SqlLite peut contenir tout ce que vous y mettez: d'un caractère de 1 octet à un long long de 8 octets.

Le lien ci-dessus répertorie tous les types et donne plus de détails sur Sqlite "affinity".

L'interface C / C++ à laquelle vous faites référence doit fonctionner avec des langages fortement typés.

Il y a donc deux API: sqlite3_column_int (), max 4 octets; et sqlite3_column_int64 ()

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

50
répondu paulsm4 2011-09-07 19:23:12