2013-04-30 53 views
1

我想在来自其他数据库的字段和索引可能不区分大小写的更多表中使用大小写不敏感。FireBird:结合上部和主键约束

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

我试图在索引中使用upper函数,并在主键中使用它来保留程序逻辑。

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

也许这是一个不可能的任务? 或者你知道我用“upper”索引定义主键的方法吗?

感谢您的任何信息!

回答

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

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