我想要的是相當於在MySQL中使用utf8_unicode_ci
。所以,如果我有那些字符串(默認排序順序在PostgreSQL):在Django中使用Postgresql 9.6如何對大小寫不區分大小寫?
- 穀倉
- 泡泡
- BOEUF
- 牛肉
- boulette
- bémol
我希望他們會像這樣排序(與MySQL中的utf8_unicode_ci
一樣):
- 穀倉
- 牛肉
- bémol
- BOEUF
- boulette
- 氣泡
這種排序的是不區分大小寫,不區分重音和連字被轉換成多個字符。
我知道unaccent
和lower
在Postgresql中,但我不知道如何使用它們從Django。
和Django/PostgreSQL的可能的解決方案:
- 僅適用於規範化的數據(低,unaccent)排序添加新列。
- 添加一個索引(like in this answer),但我不確定它如何與Django配合使用?
我不認爲全文搜索或Trigram可以幫助我在這裏,因爲我不一定基於文本做搜索,但我需要得到良好的排序順序。
理想情況下,查詢應該很快,所以使用另一個索引列看起來像一個很好的途徑。但我希望找到一個解決方案,我不需要爲我的數據庫中的每個現有文本列實施,這很容易維護等。是否有最佳做法來做到這一點?
據我所知,Postgresql沒有任何排序方式可以進行我想要的排序。如果你能證明我錯了,我會很開心! – Etienne
@Etienne我在我的答案中添加了一個測試用例。 –
我試過你的測試用例,並且'SELECT'都給出了相同的排序順序。但是我在一箇舊的OS X系統上閱讀你的消息,記得我幾年前在這個系統上可能有這個問題!我會在另一個系統上測試它並回來。謝謝! – Etienne