如何确定是否使用COLLATE NOCASE创建SQLite列

问题描述 投票:2回答:3

SQLite数据库中的列必须是COLLATE NOCASE。我假设没有办法将该功能添加到现有表中,所以我准备用它重新创建表。如何确定现有列是否为COLLATE NOCASE以避免每次打开时重新创建表?

sql sqlite
3个回答
0
投票

如何确定现有列是否为COLLATE NOCASE

查询

SELECT sql FROM sqlite_master WHERE type='table' AND tbl_name='my_table'

会给你那张桌子的CREATE TABLE声明。您可以检查DDL以确定该列是否已定义为COLLATE NOCASE


0
投票

如果足以更改查询中的排序规则,则可能根本不需要这样做。我的意思是你可以在查询中覆盖它。它不会影响约束或索引,但根据您的使用情况,它可能已经足够好了。

需要明确的是:表定义中的collat​​e子句只是查询的默认值。您可以在查询中覆盖它。

EG

 WHERE column = 'term' COLLATE NOCASE

要么

 ORDER BY column COLLATE NOCASE

然而,并不是说SQLite的LIKE不尊重collat​​e子句(而是使用pragma case_sensitive_like)。


0
投票

最简单和最通用的方法是在某处(在另一个表中,或使用PRAGMA user_version)存储版本号。

如果要检查列本身,请使用具有列的排序规则影响的比较的查询:

SELECT Col = upper(Col)
FROM (SELECT Col
      FROM MyTable
      WHERE 0       -- don't actually return any row from MyTable
      UNION ALL
      SELECT 'x'    -- lowercase; same collation as Col
     );
© www.soinside.com 2019 - 2024. All rights reserved.