如何爲整個PostgreSQL數據庫甚至整個服務器/集羣設置大小寫不敏感?PostgreSQL中的大小寫不敏感
UPD:用於列值。我剛剛從MS SQL遷移了數據庫,現在正在尋找如何以最簡單的方式獲得類似於我們之前進行排序,過濾和其他內容的行爲的行爲。
如何爲整個PostgreSQL數據庫甚至整個服務器/集羣設置大小寫不敏感?PostgreSQL中的大小寫不敏感
UPD:用於列值。我剛剛從MS SQL遷移了數據庫,現在正在尋找如何以最簡單的方式獲得類似於我們之前進行排序,過濾和其他內容的行爲的行爲。
未引用identifiers默認情況下(和每個SQL標準)不區分大小寫。
除此之外,你不能在標準Postgres中設置「不區分大小寫」。
您可能能夠使用CITEXT數據類型,而不是VARCHAR/TEXT:
CITEXT絕對是痛苦最小路線(按照從@Matthew木材的建議)
使用以下命令將擴展安裝到當前數據庫:
CREATE EXTENSION IF NOT EXISTS citext;
這個運行查詢像這樣,當偉大工程:
SELECT * FROM product WHERE serial_number = 'aB'
這將匹配成功ab
,Ab
,aB
或AB
。
你在哪裏可能遇到麻煩就是如果你使用參數化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);
對於列值?對於對象名稱? – 2013-02-22 11:31:01