将数字作为字符串插入到文本列中,SQLite静止图像将删除前导零

时间:2010-10-13 17:42:13

标签: string sqlite integer

我得到以下数字作为字符串:String numberString =“079674839”;

当我将此数字插入SQLite数据库时,SQLite会自动删除前导零并将字符串存储为79674839.考虑到亲和力以及该列存储TEXT,SQLite不应该存储整个字符串并保持前导零吗? / p>

由于

2 个答案:

答案 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')。此外,如果您以编程方式执行此操作,请确保您没有进行数字转换。