首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >SQLite -关闭整个数据库的大小写敏感性

SQLite -关闭整个数据库的大小写敏感性
EN

Stack Overflow用户
提问于 2017-11-24 08:59:34
回答 2查看 2.4K关注 0票数 1

我是否可以关闭整个数据库的大小写敏感性,即所有表的所有列?

如果我已经创建了数据库,会发生什么?

是否必须对所有将COLLATE设置为NOCASE的列手动执行此操作?

我在几个查询中尝试过NOCASE,如下所示

代码语言:javascript
运行
复制
select * from ...table  COLLATE NOCASE

但是,如果我或其他一些新人忘了使用NOCASE,我厌倦了在创建表时创建每一列NOCASE。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-11-24 09:15:58

您应该在表上设置COLLATE NOCASE。如果表已经存在,请使用ALTER TABLE。有关描述和示例,请参见这里的sqlite.org

MrGumble是对的,SQLite不支持直接用ALTER TABLE更改排序规则。您需要通过这样的中间表:

代码语言:javascript
运行
复制
CREATE TABLE table01 (id, name countrycode, comment );
INSERT INTO table01 SELECT id, name, countrycode, comment FROM table;
DROP TABLE table;
CREATE TABLE table (
   id       integer PRIMARY KEY AUTOINCREMENT,
   name     text COLLATE NOCASE
   country  integer,
   comment  text COLLATE NOCASE
);
INSERT INTO table (id, name, countrycode, comment)
    SELECT id, name, countrycode, comment FROM table01;
DROP TABLE table01;

有一个名为SQLite大师的应用程序(免费试用30天)为您完成此过程。

票数 4
EN

Stack Overflow用户

发布于 2021-11-10 06:34:19

您说得很好,它应该是整个数据库的设置,而不是注意每一列指定为不区分大小写。因为有一种情况你可能会出错。这是连接列以进行比较的时候。例如:

代码语言:javascript
运行
复制
SELECT * FROM table1 t1 WHERE col1||col2 NOT IN (SELECT col3||col4 FROM table2 t2)

即使您在所有字段上设置了"collate“,也必须在这里专门设置排序规则。因此,为了使比较不区分大小写,应:

代码语言:javascript
运行
复制
SELECT * FROM table1 t1 WHERE col1||col2 NOT IN (SELECT col3||col4 FROM table2 t2) COLLATE NOCASE
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47469636

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档