Wie mache ich meine Postgresql-Datenbank verwenden eine Groß-und Kleinschreibung Sortierung?
In mehrere SO Beiträge OP fragte nach einer effizienten Möglichkeit suchen von text-Spalten in einer case-insensitive Weise.
So viel wie ich verstehen konnte, der effizienteste Weg ist, um eine Datenbank mit einer case-insensitive Sortierung. In meinem Fall erstelle ich die Datenbank von Grund auf neu, so habe ich die perfekte Kontrolle über die DB-collation. Das problem ist nur, dass ich keine Ahnung habe, wie es zu definieren ist und konnte keine finden Beispiel es.
Bitte zeigen Sie mir, wie man erstellen Sie eine Datenbank mit der groß-und Kleinschreibung Sortierung.
Ich bin mit postgresql 9.2.4.
BEARBEITEN 1
Den CITEXT
- Erweiterung ist eine gute Lösung. Allerdings hat es einige Einschränkungen, wie in der Dokumentation erläutert. Ich werde sicherlich verwenden, wenn keine bessere Möglichkeit besteht.
Möchte ich betonen, dass ich wünschte, ALLE die string-Operationen, die groß-und Kleinschreibung. Mit CITEXT
für jeden TEXT
Feld ist eine Möglichkeit. Allerdings verwenden Sie eine case insensitive Sortierung, das beste wäre, wenn überhaupt möglich.
Nun https://stackoverflow.com/users/562459/mike-sherrill-catcall sagt, dass PostgreSQL verwendet, die alle Sortierungen der zugrunde liegende system macht. Ich habe nichts dagegen, das Betriebssystem über eine case insensitive Sortierung. Das einzige problem ich habe keine Ahnung, wie es zu tun.
InformationsquelleAutor der Frage mark | 2013-09-14
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gibt es keine groß-und Kleinschreibung Sortierungen, aber es ist die citext-Erweiterung:
http://www.postgresql.org/docs/current/static/citext.html
InformationsquelleAutor der Antwort Denis de Bernardy
Für meine Zwecke die ILIKE-Schlüsselwort hat den job.
Aus der postgres-docs:
InformationsquelleAutor der Antwort ToniTornado
Dies ist nicht die änderung der Sortierung, aber vielleicht jemand helfen diese Art von Abfrage, wo ich die Funktion
lower
:SELECT id, full_name, email FROM nurses WHERE(lower(full_name) LIKE '%bar%' OR lower(email) LIKE '%bar%')
InformationsquelleAutor der Antwort Štefan Bartoš
Ich glaube, dass müssen Sie Ihre Sortierung wie eine Kommandozeilen-option, um
initdb
beim erstellen der Datenbank-cluster. So etwas wieScheint es auch, dass mit PostgreSQL 9.3 auf Ubuntu und Mac OS X,
initdb
erstellt automatisch die Datenbank-Clusters mit einem case-insensitive Sortierung, default in der aktuellen OS locale, in meinem Fallen_US.UTF-8
.Könnten Sie eine ältere version von PostgreSQL, die nicht standardmäßig auf dem host-locale? Oder könnte es sein, dass Sie ein Betriebssystem verwenden, das nicht alle groß- /Kleinschreibung Sortierungen für PostgreSQL zu wählen?
InformationsquelleAutor der Antwort glyphobet