Seite 1 von 1

PostgreSQL case sensitive / case insensitive

Verfasst: Donnerstag 6. August 2009, 22:49
von BerlinerMC
Hallo Community,

leider weis ich nicht mehr weiter nach langer Google suche.
Also ich habe folgendes Problem:
Ich möchte ganz gerne eine Webseite mit Django machen und als DBMS PostgreSQL.
Bis jetzt hat auch alles wunderbar funktioniert bis mir heute aufgefallen ist, dass PostgreSQL case sensitive ist.
Ich wollte mal fragen wie ihr das gelöst habt, das z.B.

SELECT * FROM test WHERE username = 'Test';
und
SELECT * FROM test WHERE username = 'tEsT';

dasselbe Ergebnis bringt?!
Django Syntax:

test.objects.get(username = 'Test')
oder
test.objects.get(username = 'tEsT')

Ich habe gelesen das es bei PostgreSQL mit "collation" gehen soll.
Aber leider ist mir die Syntax nach CREATE table nicht klar!

Also wo soll collation hin und welcher Befehl schaltet case sensitive aus / ein?!

Hoffe ihr könnt mir weiterhelfen :)

Lg
Berliner

Verfasst: Freitag 7. August 2009, 06:22
von sehbaer

Code: Alles auswählen

SELECT * FROM test WHERE lower(username) = lower('tEsT');
sollte es schon erledigen.

Verfasst: Freitag 7. August 2009, 07:08
von Hyperion
@OP: Wieso sollte man so etwas wollen?

Generell würde ich sagen, dass ich das wenn schon intern lösen würde. Wenn Du innerhalbd Deines Python Codes Objekte nicht case sensitive behandeln willst, dann konvertiere sie so früh wie möglich nach einer User-Eingabe in Kleinbuchstaben o.ä.

Re: PostgreSQL case sensitive / case insensitive

Verfasst: Freitag 7. August 2009, 09:19
von sma
BerlinerMC hat geschrieben:Bis jetzt hat auch alles wunderbar funktioniert bis mir heute aufgefallen ist, dass PostgreSQL case sensitive ist.
Das ist nicht PostgreSQL-spezifisch, sondern der Normalfall bei allen Datenbanken. Siehe http://docs.djangoproject.com/en/dev/re ... ts/#iexact für eine Django-spezifische Lösung.

Stefan

Verfasst: Samstag 8. August 2009, 20:05
von BerlinerMC
sehbaer hat geschrieben:

Code: Alles auswählen

SELECT * FROM test WHERE lower(username) = lower('tEsT');
sollte es schon erledigen.
Das geht zwar so in der psotgreSQL Konsole so, aber nicht Django spezifisch!
Hyperion hat geschrieben: @OP: Wieso sollte man so etwas wollen?
Es gibt User die ihren Namen irgendwie immer anders schreiben und wenn sie sich einloggen in ein System dann auch wieder anders.
Du kannst hier in dem Forum dich einloggen mit Hyperion, hyperion oder wie auch immer, deine Daten werden immer gefunden.
Oder wenn ich eine Suche eingebe und ein exaktes Ergebnis haben möchte, dann sollte das System nicht auf Groß / Kleinschreibung achten
sma hat geschrieben: Das ist nicht PostgreSQL-spezifisch, sondern der Normalfall bei allen Datenbanken. Siehe http://docs.djangoproject.com/en/dev/re ... ts/#iexact für eine Django-spezifische Lösung.
Bei MySQL ist es nicht so! Mit dem DBMS habe ich vorher gearbeitet.
Aber danke für den Link, das werde ich dann so machen :)

Hatte nur gehofft, das es bei postgreSQL irgendwo eine Einstellung gibt wo man case sensitive ein / abschalten kann. Jedoch habe ich das im Internet nicht gefunden.

Verfasst: Sonntag 9. August 2009, 16:07
von Hyperion
BerlinerMC hat geschrieben: Es gibt User die ihren Namen irgendwie immer anders schreiben und wenn sie sich einloggen in ein System dann auch wieder anders.
Du kannst hier in dem Forum dich einloggen mit Hyperion, hyperion oder wie auch immer, deine Daten werden immer gefunden.
Oder wenn ich eine Suche eingebe und ein exaktes Ergebnis haben möchte, dann sollte das System nicht auf Groß / Kleinschreibung achten
Ok, aber das kannst Du ja generell so lösen, dass Du diese Eingabe explizit in Kleinbuchstaben wandelst und erst dann mit der DB abgleichst.

Generell halte ich es für sinnvoll, dass eine DB da case-sensitiv agiert - das andere Verhalten kann man ja eben leicht simulieren, was andersherum sicherlich schwieriger wäre ;-)