SQLite/FoxPro 更新无法使用 = 找到记录但使用 LIKE 找到它

SQLite/FoxPro Update can't find record using = but finds it using LIKE

我正在将 FoxPro 数据库转换为 SQLite,并将指令迁移到更新,我发现了一个问题。

如果在 FoxPro 中我使用 Update Fact01 set Motivo = 'asdfgh' where TipoDoc='FV' 行未更新。

但是如果我使用 Update Fact01 set Motivo = 'asdfgh' where TipoDoc Like 'FV' 行就会改变。

如果我在 SQLite 引擎中执行第一条指令,行也会更改。 TipoDoc 的字段类型是 NChar(2)。

此外,如果我在 Foxpro 中执行 select * from Fact01 where TipoDoc ='FV' 语句,它工作正常。

知道这里发生了什么吗?

这发生在我身上,因为我将列值存储为 BLOB 而不是 TEXT。结果是 BLOB 值小于 TEXT 值,所以 LIKE 找到了匹配但 = 没有。你可能遇到了同样的问题。

我不确定这是因为 Nchar 可以存储 unicode 数据还是一般数据的存储方式。将 ALLTRIM 环绕在 WHERE 子句周围可能会解决该问题。

Update Fact01 set Motivo = 'asdfgh' where ALLTRIM(TipoDoc)='FV'