SQLite顺序通过放置变音符号和特殊字符结束
我正在使用Phonegap为iOS做一个字典应用程序。
当查询数据库的字母表列表我使用COLLATE NOCASE
:
ORDER BY term COLLATE NOCASE ASC
这解决了这个问题,即以小写字母开头的术语(附加到最后)。
然而,非标准字符öäüéêè最后仍然得到sorting〜这里有两个例子:
Expected: Öffnungszeiten Oberved: Zuzahlung Zuzahlung Öffnungszeiten (or) clé cliquer sur cliquer sur clé
我环顾四周,发现类似的问题在这里或这里讨论,但似乎一般的build议是安装某种types的扩展
这个扩展可能可以帮助你…
…使用ICU作为扩展
SQLite支持与ICU集成…
但我不知道这是否适用于我的情况下数据库不是由我自己托pipe,但在客户端设备上运行。 所以我想我会把这个扩展w /我的应用程序包。
我对iOS不是很熟悉,但是我觉得这个感觉很复杂 – 至less。
另外在官方论坛中,我发现这个提示:
SQLite does not properly handle accented characters.
并在文本中一点点的海报提到SQLite中的错误。
我发现的所有链接都没有被激活,但是它们中的一些似乎并没有处理我正在开发的移动环境。
所以我想知道是否有人在他们的iOS项目上find了解决scheme。
该文件说明他们只有3个默认的COLLATION选项:
6.0整理序列
当SQLite比较两个string时,它使用一个整理序列或整理函数(两个词用于同一事物)来确定哪个string更大或者两个string是否相等。 SQLite有三个内置的整理函数:BINARY,NOCASE和RTRIM。
BINARY - Compares string data using memcmp(), regardless of text encoding. NOCASE - The same as binary, except the 26 upper case characters of ASCII are folded to their lower case equivalents before the
进行比较。 请注意,只有ASCII字符是大小写的。 由于所需表的大小,SQLite不会尝试执行完整的UTF大小写折叠。 RTRIM – 与二进制相同,只是后面的空格字符被忽略。
现在我最好的猜测是在JavaScript中进行sorting,但是我怀疑这对整体性能没有什么好处。
原因是iOS上的SQLite没有启用ICU。 所以你需要build立你自己的启用ICU的SQLite版本+你自己的ICU版本作为静态lib +添加ICU .dat,并使SQLite加载这个.dat文件。 然后你可以通过一个简单的SQL命令加载任何sorting规则(例如,'dbu'打开后'icu_load_collation(“de_DE”,“DEUTSCH”))
它不仅听起来像是污垢的工作,它确实是。 试着find一个已经完成的SQLite + ICU版本。
- VS2013 Cordova iOS Remotebuild错误无法POST /build/tasks?command=build&vcordova=4.3.1&cfg=debug
- 如何在Phonegap ios应用中embeddedyoutubevideo
- 在Ionic / Phonegap中播放video(webkit-playsinline不起作用)
- 在启动应用程序之前,启animation面运行,然后闪烁错误的随机图像
- 设置AutoHideSplashScreen在iOS的Cordova 3.0.0中不起作用
- cordova应用程序挂起在iOS 10上启动
- 由于使用localStorage,iOS PhoneGap应用程序被拒绝
- 如何在Phonegap中添加垂直滚动
- 强制iOS应用程序在Safari中打开外部链接