2010-10-13 12 views
7

başını kaldırır. Aşağıdaki sayıyı bir dize olarak aldım: String numberString = "079674839";Metin sütununa bir dize olarak bir sayı ekleme ve SQLite hareketsiz sayısı

Bu numarayı bir SQLite DB'ye eklediğimde, SQLite otomatik olarak baştaki sıfırı kaldırır ve dizeyi 79674839 olarak depolar. Afiniteyi göz önüne alır ve sütun TEXT'yi saklar, SQLite tüm dizeyi depolamamalı ve baştaki sıfırı saklamamalı mıydı?

Teşekkür

numarası, etrafında

cevap

1

Kullanım tek tırnak (yani '079674839') o satır içi sql kodunda herhangi bir yerde ise. Ayrıca, bunu programlı olarak yapıyorsanız, sayısal bir dönüşümden geçmediğinizden emin olun.

+0

Dizeleri programlı olarak ekliyorum. Öyleyse, SQLite'de baştaki sıfırları içeren bir sayıyı saklamanın bir yolu var mı? – ram

+0

Sonunda, DB'ye numara eklemeden önce numaraya bir belirteç ekleyerek ve DB'den numarayı aldıktan sonra belirteci kaldırarak sorunu hackledim. Ancak çok yavaş olan String manipülasyon gerektirir. – ram

7

Veritabanı şemanızı bir kez daha kontrol edin. Datatypes in SQLite Version 3 numaralı belgede belgelendiği gibi, sütun türü adı, değerlerin saklanmadan önce nasıl işlendiğini etkiler.

İşte bir bellek içi veri tabanını kullanarak, göstermek için bir Python programı:

import sqlite3 

db = sqlite3.connect(':memory:') 
val = "0796"; 
db.execute('CREATE TABLE test (i INTEGER, r REAL, t TEXT, b BLOB);') 
db.execute('INSERT INTO test VALUES (?, ?, ?, ?);', (val, val, val, val)) 
res = db.execute('SELECT * FROM test'); 
print '\t'.join([x[0] for x in res.description]) 
for row in res.fetchall(): 
    print '\t'.join([repr(x) for x in row]) 

çıkışı şudur: Sütun aslında bir tamsayı türüdür gibi

i r  t  b 
796 796.0 u'0796' u'0796' 

Yani görünüyor. Şema tanımına bir bakın (sqlite3 database.db .schema komut satırından çalışır), yeniden documentation'a bakın ve METİN yakınlığına eşlenen tür adlarından birini kullandığınızdan emin olun. Bilinmeyen tür isimler INTEGER yakınlığına sahip olur.

Kendi durumunda, varsayılan INTEGER yakınlığıyla biten 'STR' kullanıyordum. 'TEXT' olarak değiştirdim ve SQLite baştaki sıfırlarıma saymaya başladı.

+0

Çok teşekkürler, bu kabul edilen cevap olmalı. SQLite'nin tür yakınlığı, izlemesi zor olan parçalara yol açabilir. '' 'Ve bu sadece bir tamsayı varsayılan, ancak başlayana kadar bir fikrin var etmeyeceğini; SQLite Eğer TABLO tabloismi (Sütun1 ScoobyDoobyDoo) CREATE' '' koyabilirsiniz ... geçersiz türleri için bir hata oluşturması gerekir '00789' gibi bir şeyi sorguluyor ve 789 olarak çıkıyor ... –