1

我在我的 kotlin 多平台应用程序中使用 SQLDelight。它工作正常。但我发现不区分大小写的选择请求存在问题。它不适用于 iOS。

我使用本教程将 SQLDelight 集成到我的应用程序https://kotlinlang.org/docs/kmm-configure-sqldelight-for-data-storage.html中。

我有这样的查询

SELECT * FROM mytable WHERE caseInsensitiveField like '%VaLuE%'

在 SQLDelight 文件中,它被描述为

SELECT * FROM mytable WHERE caseInsensitiveField like ('%' || :filter || '%')

我需要对所有 char 案例进行此选择工作。它在 Android 上运行良好。但它不适用于iOS。选择区分大小写。

我尝试了网络上的技巧

SELECT * FROM mytable WHERE UPPER(caseInsensitiveField) like UPPER('%' || :filter || '%')

它在androidn上仍然可以正常工作,但在iOS上却不行。

笔记。我用非拉丁文本测试 - 用西里尔字母

我怎样才能让它在iOS上工作?也许它与编码有关?

更新 1。我发现建议使用特殊的 pragme 让它工作。

private val DB = Database(databaseDriverFactory.createDriver().apply {
    execute(null,"PRAGMA case_sensitive_like=OFF;",0)
})

但这不影响。它也破坏了 androd 选择(不知道为什么,似乎内部 sqlite 使用了一些不同的 LIKE 函数)

更新 2。我还尝试将 COLLATE NOCASE 添加到查询的末尾。它在iOS上也不起作用

更新 3。最后,我发现在 iOS 上的 select 排序也不起作用!但也许这仅适用于非拉丁文本。我的数据是 cirylic 字母(乌克兰语)。

4

0 回答 0