如何使用指定的语言环境对sqlite3中的文本进行排序?

kle*_*lew 15 sqlite locale ruby-on-rails collation

默认情况下,Sqlite3仅按ascii字母排序.我试图查看谷歌,但我发现的唯一的事情是有关整理的信息.SQLITE3只NOCASE,RTRIMBIARY归类.如何添加对特定区域设置的支持?(我在Rails应用程序中使用它)

kle*_*lew 26

我接受了Doug Currie的回答,但我想添加一些"算法"怎么做,因为sqlite3文档非常奇怪(至少对我而言).

好的,我们现在正在使用sqlite3:

  1. 下载sqlite的ICU扩展

  2. 编译它:

    gcc -shared icu.c `icu-config --ldflags` -o libSqliteIcu.so
    

    它适用于Linux.我还需要安装额外的ICU开发包:

    sudo apt-get install libicu-dev
    

    我正在研究64位架构,我得到错误__relocation R_X86_64_32S__(无论它意味着什么:).GCC建议添加-fPIC编译选项,这有助于.

  3. 运行sqlite3.我们可以用命令加载扩展:

    .load './libSqliteIcu.so'
    

    假设它在当前目录中,我们也可以指定整个路径.

  4. 创建新的排序规则:

    SELECT icu_load_collation('pl_PL', 'POLISH');
    

    第一个参数是所需的区域设置,第二个参数是它(它可以是任何东西).

  5. 现在我们可以使用新的语言环境对数据进行排序:

    SELECT * FROM some_table ORDER BY name COLLATE POLISH;
    

    它不区分大小写!


Dou*_*rie 13

SQLite 支持ICU集成.根据自述文件, sqlite/ext/icu/README.txtsqlite/ext/icu/目录包含SQLite"ICU"扩展的源代码,它是"International Components for Unicode"库与SQLite的集成.

1. Features

    1.1  SQL Scalars upper() and lower()
    1.2  Unicode Aware LIKE Operator
    1.3  ICU Collation Sequences
    1.4  SQL REGEXP Operator
Run Code Online (Sandbox Code Playgroud)