如何将sqlite3数据库的排序规则更改为不区分大小写排序?

如何将sqlite3数据库的排序规则更改为不区分大小写排序?,sql,sqlite,sql-order-by,case-insensitive,Sql,Sqlite,Sql Order By,Case Insensitive,我对sqlite3数据库进行了查询,该数据库提供了排序后的数据。数据根据一列进行排序,该列是varchar列名。现在当我进行查询时 select * from tableNames Order by Name; 它提供这样的数据 Pen Stapler pencil 意味着它正在考虑区分大小写的东西。我想要的方式如下 Pen pencil Stapler 那么,为了获得必要的结果,我应该在sqlite3数据库中进行哪些更改 相关的 SQLite讨论用户定义的排序

我对sqlite3数据库进行了查询,该数据库提供了排序后的数据。数据根据一列进行排序,该列是varchar列名。现在当我进行查询时

select * from tableNames Order by Name;
它提供这样的数据

Pen Stapler pencil 意味着它正在考虑区分大小写的东西。我想要的方式如下

Pen pencil Stapler 那么,为了获得必要的结果,我应该在sqlite3数据库中进行哪些更改

相关的

SQLite讨论用户定义的排序规则序列。具体来说,您可以使用COLLATE NOCASE来实现您的目标

他们举了一个例子:

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
);
请注意:

-使用NOCASE排序规则序列(即值)执行分组 -“abc”和“abc”放在同一组中。 从t1中选择计数*按d分组

select * from tableNames Order by lower(Name);

Michael van der Westhuizen在下面的评论中解释了为什么这不是一个好方法。我留下这个答案是为了保留他的评论,并作为对其他人的警告,这些人可能会有与我相同的“聪明”想法-

要对其进行不区分大小写的排序,可以使用ORDER BY Name COLLATE NOCASE

在SQLite数据库中使用以下语句:

PRAGMA case_sensitive_like = false

这不是一个好主意-如果没有基于函数的索引,则按函数排序将导致性能和可伸缩性问题。请参阅上面Dror Harari的答案,以了解在sqlite3中执行此操作的正确方法。如果您使用基于lowerName的基于函数的索引的Oracle,这是可以的,但在本例中不是。COLLATE NOCASE是否适用于任何语言?如果不是,如果编译时不知道特定的语言,如何以不区分大小写的方式对文本字段进行排序?IIRC sqlite3本机是UTF-8,因此应该根据Unicode UTF-8规则进行排序。当然,这可能不是用户所期望的…@moodforaday:没有内置的NOCASE排序规则。您可以在应用程序中重新定义NOCASE排序规则,并根据当前系统/用户区域设置实现排序。只需将自定义排序规则命名为NOCASE。对于ASCII字符,区分大小写的like已为false,对于超出ASCII范围的unicode字符,默认情况下区分大小写。