2012-08-13 17 views
16

Android uygulamamla birlikte bir SQLite veritabanım var. Yanlışlıkla "Metin" veri türü yerine "Dize" veri türü kullanarak bir tablo tanımladım. İşte kod ile kod:SQLite içinde "Metin" ve "Dize" veri türü arasındaki fark

private final String LISTDATES_CREATE = "create table if not exists ListDates (_id integer primary key autoincrement, ListName string not null, UpdateDate string not null);"; 

Bu, çalışır. Hiçbir zaman bir hata atmadı ve verileri saklayıp alabilirim. Ancak, belgelerinde veya internette SQLite'deki "String" veri türüne herhangi bir başvuru bulamıyorum. Tipik olarak, tüm dize türü verileri "metin" şöyle tanımlanır:

private final String LISTDATES_CREATE = "create table if not exists ListDates (_id integer primary key autoincrement, ListName text not null, UpdateDate text not null);"; 

Benim soru, bir "metin" veri türü karşı "dize" veri türü ile tanımlanan bir alanda arasındaki fark nedir nedir? Bir fark var mı? Eğer öyleyse, varsa, birini veya diğerini kullanmanın sonuçları nelerdir?

cevap

26

Burada dikkat edilmesi gereken ince nokta, SQLite'nin sütunlara koyduğunuz değerlerin veri türünü zorlamamasıdır. Bu, sayısal bir alana metin koyabileceğiniz anlamına gelir, vb.

İki SQL ifadeniz arasındaki farkı anlamak için, sağladığınız sütun türlerini SQLite'nin kullandığı sütunlarla eşleştiren 2.1 Determination Of Column Affinity bölümüne bakın. Bu durumda

, tip string TEXT depolama sınıfını kullanmak DBMS söylerdim kodda text gibi sahadan bildirilmesi kural 5. üzerinden depolama sınıfına NUMERIC eşleştirilmiş olur. Yine, SQLite sütun türlerini zorlamadığından, not ettiğiniz gibi, Dizeler NUMERIC sütununda saklanırken muhtemelen iyi çalışır. muhtemelen sadece için text kullanmak iyi bir fikirdir,

alternatif örnek olarak, tip INTERESTING STUFF sahip bir sütunu tanımlayabiliriz ve bu kural aracılığıyla, INTEGER depolama sınıfına 1.

Genel eşleştirilir senin tablo tanımı.

+2

Yanıt için teşekkür ederiz. Bir kez bir hata buldum, değişimi yaptım ama maalesef bu hata ile üretimde kodum var. Büyük bir sorun gibi görünmediğinden, doğal olarak yaşlanmasına izin vereceğim. Bu gerçekten harika bir bilgi. Teşekkür ederim! –

4

Bu eski bir sorudur, ancak STRING ve METİN sütun türleri arasındaki belirli bir farkı vurgulamak istiyorum. Bir dize sayısal bir değere benziyorsa, STRING, TEXT herhangi bir dönüşüm gerçekleştirmeyecek şekilde sayısal bir değere dönüştürecektir.

örn.

create table t1(myint INTEGER, mystring STRING, mytext TEXT); 
insert into t1 values ('0110', '0220', '0330'); 
insert into t1 values ('-0110', '-0220', '-0330'); 
insert into t1 values ('+0110', '+0220', '+0330'); 
insert into t1 values ('x0110', 'x0220', 'x0330'); 
insert into t1 values ('011.0', '022.0', '033.0'); 
select * from t1 

çıktısı değerlerle satırlara: "sayısal" değerleri

myint mystring mytext 
    110  220 0330 
    -110  -220 -0330 
    110  220 +0330 
x0110 x0220 x0330 
    11  22 033.0 

Bu ondalık noktaları arka, sıfır gelen anlamına sıfır ve artı işareti çıkarılır. Bu, tablodan okunan değerleri kullanarak bir dize eşleştirmesi yapmayı düşünüyorsanız sorunlara neden olur.

İlgili konular