2013-02-22 202 views
0

如何爲整個PostgreSQL數據庫甚至整個服務器/集羣設置大小寫不敏感?PostgreSQL中的大小寫不敏感

UPD:用於列值。我剛剛從MS SQL遷移了數據庫,現在正在尋找如何以最簡單的方式獲得類似於我們之前進行排序,過濾和其他內容的行爲的行爲。

+0

對於列值?對於對象名稱? – 2013-02-22 11:31:01

回答

2

未引用identifiers默認情況下(和每個SQL標準)不區分大小寫。

除此之外,你不能在標準Postgres中設置「不區分大小寫」。

1

CITEXT絕對是痛苦最小路線(按照從@Matthew木材的建議)

使用以下命令將擴展安裝到當前數據庫:

CREATE EXTENSION IF NOT EXISTS citext; 

這個運行查詢像這樣,當偉大工程:

SELECT * FROM product WHERE serial_number = 'aB' 

這將匹配成功abAbaBAB

你在哪裏可能遇到麻煩就是如果你使用參數化SQL並讓提供者爲你構建命令。例如,使用Npgsql的(用於.NET ADO.NET提供者)使用下面的命令:

SELECT * FROM product WHERE serial_number = @serial_number; 

實際上其發送到服務器:

SELECT * FROM product WHERE serial_number = ((E'aB')::text); 

這是鑄造的值爲「文本」,其意味着它會做區分大小寫的查找。 我設法解決這個問題的方法是修改Npgsql源代碼以添加「citext」類型。使用此參數類型,將發出正確的命令:

SELECT * FROM product WHERE serial_number = ((E'aB')::citext);