将数字作为字符串插入到文本列中,SQLite 仍然会删除前导零

发布于 2024-09-27 04:20:46 字数 171 浏览 4 评论 0原文

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

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

谢谢

I got the following number as a string: String numberString = "079674839";

When I insert this number into a SQLite DB, SQLite automatically removes the leading zero and stores the string as 79674839. Considering affinity and that the column stores TEXT, shouldn't SQLite store the whole string and keep the leading zero?

Thanks

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

宣告ˉ结束 2024-10-04 04:20:46

仔细检查您的数据库架构。正如 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 从命令行工作),查看 文档,并确保您使用的是映射到 TEXT 亲和力的类型名称之一。未知类型名称具有 INTEGER 关联性。

就我自己而言,我使用的是“STR”,它最终得到默认的 INTEGER 亲和力。我将其更改为“TEXT”,SQLite 开始尊重我的前导零。

Double-check your database schema. As documented on Datatypes in SQLite Version 3, the column type name affects how values are processed before being stored.

Here's a Python program to demonstrate, using an in-memory database:

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

The output is:

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

So, it looks like your column is actually an integer type. Take a look at the schema definition (sqlite3 database.db .schema works from the command line), look at the documentation again, and make sure you are using one of type names that map to TEXT affinity. Unknown type names get INTEGER affinity.

In my own case, I was using 'STR', which ends up with the default INTEGER affinity. I changed it to 'TEXT', and SQLite started respecting my leading zeros.

诗酒趁年少 2024-10-04 04:20:46

如果数字位于内联 SQL 代码中的任何位置,请使用单引号将数字括起来(即“079674839”)。另外,如果您以编程方式执行此操作,请确保您没有进行数字转换。

Use single quotes around the number, (i.e., '079674839') if it is anywhere in inline sql code. Also, if you're doing this programatically, make sure that you are not going through a numeric conversion.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文