Search code examples
sqlsqlitesql-order-bycase-insensitive

How to change the collation of sqlite3 database to sort case insensitively?


I have a query for sqlite3 database which provides the sorted data. The data are sorted on the basis of a column which is a varchar column "Name". Now when I do the query

select * from tableNames Order by Name;

It provides the data like this.

    Pen
    Stapler
    pencil

Means it is considering the case sensitive stuff. The way I want is as follows

    Pen
    pencil
    Stapler

So what changes should I make in sqlite3 database for the necessary results?

Related How to set Sqlite3 to be case insensitive when string comparing?


Solution

  • The SQLite Datatypes documentation discusses user-defined collation sequences. Specifically you use COLLATE NOCASE to achieve your goal.

    They give an example:

    CREATE TABLE t1(
        a,                 -- default collation type BINARY
        b COLLATE BINARY,  -- default collation type BINARY
        c COLLATE REVERSE, -- default collation type REVERSE
        d COLLATE NOCASE   -- default collation type NOCASE
    );
    

    and note that:

    -- Grouping is performed using the NOCASE collation sequence (i.e. values -- 'abc' and 'ABC' are placed in the same group). SELECT count(*) GROUP BY d FROM t1;