我得到以下数字作为字符串:String numberString =“079674839”;
当我将此数字插入SQLite数据库时,SQLite会自动删除前导零并将字符串存储为79674839.考虑到亲和力以及该列存储TEXT,SQLite不应该存储整个字符串并保持前导零吗? / p>
由于
答案 0 :(得分:8)
仔细检查数据库架构。正如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开始尊重我的前导零。
答案 1 :(得分:1)
如果它在内联sql代码中的任何位置,请使用数字周围的单引号(即'079674839')。此外,如果您以编程方式执行此操作,请确保您没有进行数字转换。