我在我的 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 字母(乌克兰语)。