Différence Entre “Texte” et “Chaîne” type de données de SQLite
J'ai une base de données SQLite avec mon application Android. J'ai remarqué que j'ai accidentellement défini une table à l'aide d'une "Chaîne" de type de données au lieu de type "Texte". Voici le code avec de la ficelle:
private final String LISTDATES_CREATE = "create table if not exists ListDates (_id integer primary key autoincrement, ListName string not null, UpdateDate string not null);";
Cela fonctionne. Il n'a jamais jeté une erreur et je peux stocker et récupérer des données. Cependant je ne trouve pas de référence à une "Chaîne" de type de données de SQLite dans la documentation ou sur internet. Généralement, toutes les chaînes de caractères type de données est défini par le "texte" de la sorte:
private final String LISTDATES_CREATE = "create table if not exists ListDates (_id integer primary key autoincrement, ListName text not null, UpdateDate text not null);";
Donc ma question est, quelle est la différence entre un champ défini par une "chaîne" de type de données par rapport à un type "texte"? Est-il une différence? Si oui, quelles en sont les conséquences, le cas échéant, de l'aide de l'une ou de l'autre?
Vous devez vous connecter pour publier un commentaire.
La subtile chose à noter ici est que SQLite ne pas appliquer le type de données de valeurs que vous mettez dans les colonnes. Cela signifie que vous pouvez insérer du texte dans un champ numérique, et ainsi de suite.
De comprendre la différence entre vos deux instructions SQL, consultez la section 2.1 Détermination De L'Affinité De Colonne, laquelle correspond la colonne types de vous fournir pour les classes de stockage SQLite utilise.
Dans ce cas, le type
string
est tracé de la classe de stockageNUMERIC
par la règle 5. Déclarant le terraintext
dans le code serait de dire au SGBD pour utiliser leTEXT
de stockage de classe. Encore une fois, depuis que SQLite ne pas respecter les types de colonnes, votre code sera probablement fonctionner correctement lors de stocker des Chaînes de caractères comme unNUMERIC
colonne, comme vous le notez.Comme une alternative exemple, vous pouvez définir une colonne avec le type de
INTERESTING STUFF
, et qui devrait être mappé à laINTEGER
classe de stockage, via la règle 1.Dans l'ensemble, c'est probablement une bonne idée de l'utiliser juste
text
pour votre définition de la table.C'est une vieille question, mais je tiens à souligner une différence spécifique entre une CHAÎNE de TEXTE et de types de colonne. Si une chaîne se présente comme une valeur numérique, CHAÎNE de la convertir en une valeur numérique, tandis que le TEXTE ne sera pas effectuer la conversion.
par exemple
seront les lignes de sortie avec des valeurs:
Cela signifie zéros, des zéros de fuite décimales, et symbole de plus sur le "numérique" valeurs sera dépouillé. Cela va entraîner des problèmes si vous avez l'intention de faire une chaîne du match en utilisant les valeurs de la table.