Précédent   Forum des professionnels en informatique > Bases de données > Autres SGBD > SQLite
SQLite Forum d'entraide SQLite
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 11/08/2007, 03h23   #1
Nouveau Membre du Club
 
Inscription : octobre 2005
Messages : 162
Détails du profil
Informations forums :
Inscription : octobre 2005
Messages : 162
Points : 34
Points : 34
Par défaut Les classes de stockage en sqlite3

Bonjour,

A quoi servent les classes de stockages en sqlite3 (TEXT, NUMERIC, INTEGER, REAL, NONE) ?

Es ce que ça remplace les types de données : SMALLINT, INTEGER, DECIMAL, FLOAT, DOUBLE, DATE, TIME, TIMESTAMP, CHAR, VARCHAR, ... ?

Avec mysql j'utilisé des types de données pour les colonnes mais visiblement avec sqlite on peut entrer des données de différents types pour chaques colonnes, c'est ça ?

Bref jsuis un peu perdu, si quelqu'un pouvait m'éclairer.
oranoutan est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/08/2007, 23h17   #2
Membre actif
 
Inscription : décembre 2004
Messages : 169
Détails du profil
Informations forums :
Inscription : décembre 2004
Messages : 169
Points : 175
Points : 175
Je ne peux que te diriger vers la page du site :
http://www.sqlite.org/datatype3.html

Je résume l'intérêt des types en faisant (très) court :
Les types sont utiles pour la taille des données sur le disque (un integer est plus court que sa représentation en texte par exemple), les comparaisons et les tris.

Un exemple simple :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
sqlite> CREATE TABLE a (b TEXT);
sqlite> INSERT INTO a VALUES ('1');
sqlite>  INSERT INTO a VALUES ('2');
sqlite>  INSERT INTO a VALUES ('3');
sqlite>  INSERT INTO a VALUES ('11');
sqlite>  INSERT INTO a VALUES ('222');
sqlite>  INSERT INTO a VALUES ('333');
sqlite>  SELECT * FROM a ORDER BY b ASC;
1
11
2
222
3
333
sqlite>
On remarque bien ici que les nombres sont triés dans l'ordre croissant des textes et non de leur valeur !

Toujours le même exemple, mais je n'encadre pas les données insérées par des quotes :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
sqlite> DROP TABLE a;
sqlite> CREATE TABLE a (b TEXT);
sqlite> INSERT INTO a VALUES ( 1 );
sqlite> INSERT INTO a VALUES ( 2 );
sqlite> INSERT INTO a VALUES ( 3 );
sqlite> INSERT INTO a VALUES ( 11 );
sqlite> INSERT INTO a VALUES ( 222 );
sqlite> INSERT INTO a VALUES ( 333 );
sqlite> SELECT * FROM a ORDER BY b ASC;
1
11
2
222
3
333
sqlite>
C'est le même résultat : sqlite a transformé les nombres en TEXT pendant les INSERT.

Dernier exemple pour finir : une colonne INTEGER et des données TEXT en insert :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
sqlite> DROP TABLE a;
sqlite> CREATE TABLE a (b INTEGER);
sqlite> INSERT INTO a VALUES ('1');
sqlite> INSERT INTO a VALUES ('2');
sqlite> INSERT INTO a VALUES ('3');
sqlite> INSERT INTO a VALUES ('11');
sqlite> INSERT INTO a VALUES ('222');
sqlite> INSERT INTO a VALUES ('333');
sqlite> SELECT * FROM a ORDER BY b ASC;
1
2
3
11
222
333
sqlite>
Le résultat est différent des deux premiers exemples : les données TEXT en insertion ont été converties en INTEGER. C'est donc un bon exemple de l'utilité de bien choisir ses types de colonnes et des différences d'interprétations qui seront faites avec tes données.

a+
bigane est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/08/2007, 23h41   #3
Membre actif
 
Inscription : décembre 2004
Messages : 169
Détails du profil
Informations forums :
Inscription : décembre 2004
Messages : 169
Points : 175
Points : 175
J'ai oublié une partie de ta question.
Citation:
A quoi servent les classes de stockages en sqlite3 (TEXT, NUMERIC, INTEGER, REAL, NONE) ?

Es ce que ça remplace les types de données : SMALLINT, INTEGER, DECIMAL, FLOAT, DOUBLE, DATE, TIME, TIMESTAMP, CHAR, VARCHAR, ... ?

Avec mysql j'utilisé des types de données pour les colonnes mais visiblement avec sqlite on peut entrer des données de différents types pour chaques colonnes, c'est ça ?
Oui, ces classes correspondent aux types de données de MySql.

Voici une correspondance selon mon propre avis des données MySql et SqLite :

MySql: SMALLINT, INTEGER
SqLite: INTEGER


MySql: DECIMAL, FLOAT, DOUBLE,
SqLite: REAL

MySql: DATE, TIME, TIMESTAMP,
SqLite: TEXT (à toi d'effectuer les calculs et les formatages nécessaires pour comparer ou soustraire des dates)

MySql: CHAR, VARCHAR
SqLite: TEXT


Types spéciaux SqLite:

- BLOB ou NONE sont quasi-équivalent (attention au comportement de BLOB, il ne converti pas les données insérées, donc un INTEGER reste un INTEGER contrairement au TEXT);

- NUMERIC pour des nombres ENTIERS et/ou DECIMAUX, selon qu'il y a une virgule dans le nombre au moment de l'insert ou non.

a+
bigane est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/08/2007, 00h52   #4
Nouveau Membre du Club
 
Inscription : octobre 2005
Messages : 162
Détails du profil
Informations forums :
Inscription : octobre 2005
Messages : 162
Points : 34
Points : 34
merci d'avoir pris le temps de répondre bigane, c'est sympa.
C'est compris et plus clair à présent !
oranoutan est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 23h26.


 
 
 
 
Partenaires

Hébergement Web