gpt4 book ai didi

sqlite - 当仅包含数字时,如何使sqlite保留字符串类型?

转载 作者:行者123 更新时间:2023-12-03 19:11:32 30 4
gpt4 key购买 nike

当我使用nativescript-sqlite插件创建具有STRING字段的表并输入字符串“ 000123”(仅包含数字的任何字符串),然后从数据库中读取记录时,它返回一个int(123)并且不返回保留字符串类型。有什么窍门吗?我附上用于创建,保存和返回字段的代码。

创建表(代码已简化)

 var Name = 'users';
var TableDef = MedID INT, Naam STRING ,Pin STRING';
db.execSQL("CREATE TABLE IF NOT EXISTS " + Name +
"(id INTEGER PRIMARY KEY AUTOINCREMENT," + TableDef + " )")
.then(result => {...} );


插入记录

db.execSQL( "INSERT INTO users (MedID,Naam,Pin) VALUES (?, ?,?)",
[1,'John Doe','000123'] )
.then(id => {...} );


返回密码

var db_name = "scanapp.db";
new sqlite(db_name).then(db =>
{
db.all('select MedID, Naam, Pin from users order by ID ')
.then (rows => { console.log (rows[0][2]); });
});

最佳答案

问题出在您的表定义中。您的Pin列的类型为STRING

在Sqlite中,列类型用于设置该列的亲和力,并控制在该列中存储值的首选方式。如果查看the rules for determining affinity type based on column type,您会看到类型STRING默认为NUMERIC相似性,这意味着:


具有NUMERIC关联性的列可能包含使用所有五个存储类的值。将文本数据插入NUMERIC列时,如果这种存储是无损且可逆的,则将文本的存储类转换为INTEGER或REAL(按优先顺序)。


这里有趣的是无损且可逆的位,因为这显然不是由于去除了前导0所致。我怀疑这是一个错误。

无论如何,解决方法是将表定义更改为使用具有TEXT相似性的类型-例如TEXTCHAR等,而不是当前的STRING

sqlite> create table foo(bar text, baz string);
sqlite> insert into foo values ('0012', '0012');
sqlite> select bar, typeof(bar), baz, typeof(baz) from foo;
bar typeof(bar) baz typeof(baz)
---------- ----------- ---------- -----------
0012 text 12 integer

关于sqlite - 当仅包含数字时,如何使sqlite保留字符串类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58365530/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com