2010-10-13 14 views

回答

1

周围使用人数,单引号(即“079674839”),如果它是内联SQL代码的任何地方。此外,如果您正在以编程方式进行此操作,请确保您未经过数字转换。

+0

我正在以编程方式添加字符串。那么,有没有办法在SQLite中存储包含前导零的数字? – ram 2010-10-14 07:05:22

+0

我在数据库中插入数字之前,通过添加令牌来解决问题,并在从数据库中检索数字后删除令牌。但是它需要字符串操作,这非常缓慢。 – ram 2010-10-22 07:41:38

7

仔细检查您的数据库架构。如Datatypes in SQLite Version 3所述,列类型名称影响如何在存储之前处理值。

这里有一个Python程序演示,使用内存数据库:

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]) 

输出是:

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

因此,它看起来像你的列实际上是一个整数类型。查看架构定义(sqlite3 database.db .schema作品从命令行),再次查看documentation,并确保您使用映射到TEXT关联的类型名称之一。未知的类型名称会获得INTEGER关联。

在我自己的案例中,我使用了'STR',它以默认的INTEGER亲和度结束。我将它改为'TEXT',并且SQLite开始尊重我的前导零。

+0

非常感谢,这应该是被接受的答案。 SQLite的类型关联会导致一些令人讨厌的难以追踪的错误。 SQLite应该为无效的类型抛出一个错误......你可以把它放在CREATE TABLE tableName(Col1 ScoobyDoobyDoo)中;'''这只是默认为一个整数,但直到你开始时才会有任何想法查询类似'00789'的东西,它出现为789 ... – 2016-01-26 19:46:17

相关问题