Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   [PHP/MySQL] Wieso ist diese Abfrage case-insensitive? (https://www.delphipraxis.net/128547-%5Bphp-mysql%5D-wieso-ist-diese-abfrage-case-insensitive.html)

Matze 1. Feb 2009 09:30


[PHP/MySQL] Wieso ist diese Abfrage case-insensitive?
 
Hallo miteinander,

ich habe eine ganz simple Datenbankabfrage, die aus einem Benutzernamen die zugehörige Benutzer-ID ermitteln soll. Das mache ich momentan so:

SQL-Code:
SELECT user_id FROM users WHERE user_name = 'Matze' LIMIT 1
Nun möchte ich, dass die Groß-/Kleinschreibung nicht berücksichtigt wird. Daher dachte ich, löse ich das folgendermaßen:

SQL-Code:
SELECT user_id FROM users WHERE LOWER(user_name) = 'matze' LIMIT 1
Das seltsame ist jedoch, dass die Groß-/Kleinschreibung bereits bei der obersten Abfrage ignoriert wird. Es ist zwar das, was ich erreichen möchte, doch verstehe ich nicht, wieso das bereits der Fall ist und ich nicht zuerst alles auf die gleiche Schreibweise bringen muss. Im Beispiel von PHP mit "LOWER()" und "strtolower()" bzw. "UPPER()" und "strtoupper()".

Warum ist das so?

Grüße, Matze

alcaeus 1. Feb 2009 09:50

Re: [PHP/MySQL] Wieso ist diese Abfrage case-insensitive?
 
Moin,

ich nehme an du hast eine Collation mit dem Suffix "ci" verwendet, also bspw. utf8_binary_ci oder latin1_swedisch_ci. Nun ja, dreimal darfst du raten wofuer "ci" steht :zwinker:

Lies dir eventuell diesen Artikel aus der MySQL-Doku durch :)

Greetz
alcaeus

Matze 1. Feb 2009 10:05

Re: [PHP/MySQL] Wieso ist diese Abfrage case-insensitive?
 
Hi Andy,

Tatsache du hast Recht, danke. "utf8_unicode_cs" gibt es nur nicht.

Aber solange die Daten case-sensitive in die Datenbank geschrieben werden, ist das nicht so wild. Ich werde dennoch alles auf eine Schreibweise bringen. Nicht dass ich da mal etwas ändere und dann tut's nicht mehr.

Grüße, Matze

alcaeus 2. Feb 2009 19:05

Re: [PHP/MySQL] Wieso ist diese Abfrage case-insensitive?
 
Moin Matze,

ich zitiere die MySQL-Hilfe:
Zitat:

For binary strings (BINARY, VARBINARY, BLOB), comparisons use the numeric values of the bytes in the operands
Teste mal die Collation utf8_bin, laut dem Namen mochte man meinen die waere Binaer und damit Case-Sensitive :)

Greetz
alcaeus

Matze 2. Feb 2009 19:07

Re: [PHP/MySQL] Wieso ist diese Abfrage case-insensitive?
 
Hi Andy,

stimmt, das habe ich in phpMyAdmin übersehen. Gesucht hatte ich danach.
Nur ob es sich lohnt > 100 Tabellen nun alle zu ändern, wo's doch auch so geht, hm. Ein Sicherheitsrisiko sollte es ja nicht darstellen.

Grüße, Matze

alcaeus 2. Feb 2009 19:54

Re: [PHP/MySQL] Wieso ist diese Abfrage case-insensitive?
 
Nein, Sicherheitsrisiko ist es keines - und teilweise ist es auch ganz gut, wenn Abfragen case-insensitive sind (z.B. Benutzername-Kontrollen). Du solltest aber trotzdem mit LOWER arbeiten, es sei denn du kannst garantieren dass du immer eine case-insensitive Collation verwendest. ;)

Greetz
alcaeus

Matze 2. Feb 2009 20:17

Re: [PHP/MySQL] Wieso ist diese Abfrage case-insensitive?
 
Sagte ich ja bereits:

Zitat:

Zitat von Matze
Ich werde dennoch alles auf eine Schreibweise bringen. Nicht dass ich da mal etwas ändere und dann tut's nicht mehr.

;)

Ok danke, dann kann ich das ja mal so lassen wie es ist.
Die Frage, wieso die Groß-/Kleinschreibung ignoriert wurde, hast du ja beantwortet. Mir ging's nur darum zu wissen, was los ist, nicht dass ich irgendwas falsch mache. Ich kann sonst nicht schlafen und grübel immer über sowas im Bett (wäre schön, wenn es nicht so wäre). :mrgreen:

Grüße, Matze


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:13 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz