FireBird:将upper与主键约束结合起来

时间:2013-04-30 14:26:00

标签: search indexing primary-key firebird case-insensitive

我想在更多来自其他数据库的表中使用不区分大小写,其中字段和索引可以不区分大小写。

这意味着我们可以用任何字符串格式(DAta,数据,数据等)搜索所需的行,我们可以通过任何这些键找到它。

我尝试使用带索引的upper函数,并在主键中使用它来保存程序逻辑。

但我失败了。我没有找到任何有效的SQL语句来定义它。

也许这是一个不可能完成的任务? 或者您知道我使用“上限”索引定义主键的方式是什么?

感谢您的任何信息!

2 个答案:

答案 0 :(得分:3)

如果您想进行不区分大小写的搜索,则应该使用不区分大小写的排序规则。如果您总是希望以不区分大小写的方式处理字段的值,则应在字段级别定义它,即

CREATE TABLE T (
  Foo VARCHAR(42) CHARACTER SET UTF8 COLLATE UNICODE_CI,
  ...
)

但您也可以在搜索中指定排序规则,例如

SELECT * FROM T WHERE Foo = 'bar' COLLATE UNICODE_CI

详细了解available collations at the Firebird's language reference

答案 1 :(得分:0)

恕我直言更好的方法是通过expresion使用索引

create index idx_upper on persons computed by (upper(some_name))

sql查询

select * from persons order by upper(some_name);
select * from persons where upper(some_name) starting with 'OBAM';

将使用索引idx_upper