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
PostgreSQL case sensitive / case insensitive
Code: Alles auswählen
SELECT * FROM test WHERE lower(username) = lower('tEsT');
...es sind ganz bestimmt mehr Nullen als Einsen.
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
@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.ä.
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.ä.
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.BerlinerMC hat geschrieben:Bis jetzt hat auch alles wunderbar funktioniert bis mir heute aufgefallen ist, dass PostgreSQL case sensitive ist.
Stefan
-
- User
- Beiträge: 25
- Registriert: Montag 8. Dezember 2008, 19:32
Das geht zwar so in der psotgreSQL Konsole so, aber nicht Django spezifisch!sehbaer hat geschrieben:sollte es schon erledigen.Code: Alles auswählen
SELECT * FROM test WHERE lower(username) = lower('tEsT');
Es gibt User die ihren Namen irgendwie immer anders schreiben und wenn sie sich einloggen in ein System dann auch wieder anders.Hyperion hat geschrieben: @OP: Wieso sollte man so etwas wollen?
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
Bei MySQL ist es nicht so! Mit dem DBMS habe ich vorher gearbeitet.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.
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.
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
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.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
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