我是否可以关闭整个数据库的大小写敏感性,即所有表的所有列?
如果我已经创建了数据库,会发生什么?
是否必须对所有将COLLATE设置为NOCASE的列手动执行此操作?
我在几个查询中尝试过NOCASE,如下所示
select * from ...table COLLATE NOCASE但是,如果我或其他一些新人忘了使用NOCASE,我厌倦了在创建表时创建每一列NOCASE。
发布于 2017-11-24 09:15:58
您应该在表上设置COLLATE NOCASE。如果表已经存在,请使用ALTER TABLE。有关描述和示例,请参见这里的sqlite.org。
MrGumble是对的,SQLite不支持直接用ALTER TABLE更改排序规则。您需要通过这样的中间表:
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天)为您完成此过程。
发布于 2021-11-10 06:34:19
您说得很好,它应该是整个数据库的设置,而不是注意每一列指定为不区分大小写。因为有一种情况你可能会出错。这是连接列以进行比较的时候。例如:
SELECT * FROM table1 t1 WHERE col1||col2 NOT IN (SELECT col3||col4 FROM table2 t2)即使您在所有字段上设置了"collate“,也必须在这里专门设置排序规则。因此,为了使比较不区分大小写,应:
SELECT * FROM table1 t1 WHERE col1||col2 NOT IN (SELECT col3||col4 FROM table2 t2) COLLATE NOCASEhttps://stackoverflow.com/questions/47469636
复制相似问题