99 votes

Types de données SQLite

Lors de la création d'une table en SQLite3, je m'embrouille face à tous les types de données possibles qui impliquent des contenus similaires. Quelqu'un pourrait-il me dire quelle est la différence entre les types de données suivants ?

INT, INTEGER, SMALLINT, TINYINT

DEC, DECIMAL

LONGCHAR, LONGVARCHAR

DATETIME, SMALLDATETIME

Existe-t-il une documentation quelque part qui énumère les capacités min./max. des différents types de données ? Par exemple, je suppose que smallint détient une valeur maximale plus grande que tinyint mais une valeur plus petite que l'entier, mais je n'ai aucune idée de ce que sont ces capacités.

94voto

J. Polfer Points 5895

SQLite, techniquement, n'a pas de types de données, il y a classes de stockage dans un système de typage manifeste, et oui, c'est déroutant si vous êtes habitué aux SGBDR traditionnels. Tout, en interne, est stocké sous forme de texte. Les types de données sont contraints/convertis dans divers emplacements de stockage en fonction de leurs affinités (comme les types de données affectés aux colonnes).

La meilleure chose que je vous recommande de faire est de

  1. Oubliez temporairement tout ce que vous saviez sur les types de données des bases de données autonomes.

  2. Lisez le lien ci-dessus du site SQLite.

  3. Prenez les types basés sur votre ancien schéma, et voyez à quoi ils correspondent dans SQLite.

  4. Migrer toutes les données vers la base de données SQLite.

Note : Les limitations du type de données peuvent être encombrantes, surtout si vous ajoutez des durées de temps, des dates ou des choses de cette nature en SQL. SQLite a très peu de fonctions intégrées pour ce genre de choses. Cependant, SQLite fournit un moyen facile de créer vos propres fonctions intégrées pour ajouter des durées de temps et des choses de cette nature, à travers la fonction sqlite3_create_function fonction de bibliothèque. Vous utiliserez cette fonction à la place des procédures stockées traditionnelles.

46voto

dan04 Points 33306

La différence est le sucre syntaxique. Seules quelques sous-chaînes des noms de types sont importantes pour l'affinité des types.

  • Affinité INT, INTEGER, SMALLINT, TINYINT → INTEGER, car ils contiennent tous "INT".
  • LONGCHAR, LONGVARCHAR → Affinité TEXT, car ils contiennent "CHAR".
  • DEC, DECIMAL, DATETIME, SMALLDATETIME → NUMERIC, car ils ne contiennent aucune des sous-chaînes qui comptent.

Les règles de détermination de l'affinité sont énumérées à l'adresse suivante Site SQLite .

Si vous insister sur le typage strict, vous pouvez l'implémenter avec CHECK contraintes :

CREATE TABLE T (
   N   INTEGER CHECK(TYPEOF(N) = 'integer'),
   Str TEXT CHECK(TYPEOF(Str) = 'text'),
   Dt  DATETIME CHECK(JULIANDAY(Dt) IS NOT NULL)
);

Mais je ne m'en occupe jamais.

Quant à la capacité de chaque type :

  • INTEGER est toujours signé en 64 bits. Notez que SQLite optimise le stockage de petits entiers dans les coulisses, donc TINYINT ne serait pas utile de toute façon.
  • REAL est toujours en 64 bits ( double ).
  • TEXT y BLOB ont un taille maximale déterminée par une macro du préprocesseur, qui est par défaut de 1 000 000 000 d'octets.

10voto

Jay Points 6999

La plupart d'entre eux sont là pour la compatibilité. Il n'y a vraiment que les entiers, les flottants, les textes et les blobs. Les dates peuvent être stockées sous forme de nombre (l'heure Unix est un entier, l'heure Microsoft est un flottant) ou de texte.

3voto

user2393484 Points 11

NULL . La valeur est une valeur NULL.

INTEGER . La valeur est un nombre entier signé, stocké dans 1, 2, 3, 4, 6 ou 8 octets selon l'ampleur de la valeur.

REAL . La valeur est une valeur à virgule flottante, stockée comme un nombre à virgule flottante IEEE de 8 octets.

TEXT . La valeur est une chaîne de texte, stockée en utilisant le codage de la base de données (UTF-8, UTF-16BE ou UTF-16LE).

BLOB . La valeur est un bloc de données, stocké exactement comme il a été saisi.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X