2013-04-30 72 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