Marco Weber: wie case sensitve bei MYSQL abfragungen??

hallo! :-)
ich hoffe ich stresse euch nicht allzuviel mit meinen Fragen, aber immer wenn ich am weitermachen bin gibt es immer noch sachen die ich nicht weiss... :-(

...bin eben nur ein anfänger, der mit eurer Hilfe zu einem profi werden willl... ;-)

also, wenn ich bei mysql eine abfragung wie folgt starte, dann sind die results nicht case sensitive.... :-(

UPDATE nutzer SET nutzer_sid='$sid_aktuell' WHERE nutzer_name='$namerein'

wie kann ich das result case sensitive machen??

MFG MARCO...

  1. Hallo!

    also, wenn ich bei mysql eine abfragung wie folgt starte, dann sind die results nicht case sensitive.... :-(

    UPDATE nutzer SET nutzer_sid='$sid_aktuell' WHERE nutzer_name='$namerein'

    wie kann ich das result case sensitive machen??

    mySQL liefert Dir Deine Daten so, wie sie in den Spalten steht. Großbuchstaben werden als Großbuchstebn ausgegeben und das selbe bei Kleinbuchstaben. Die Strings kannst Du dann für vergleiche nutzen, also...

    $aus_mysql = "Weber"

    if($aus_mysql == "Weber") // richtig

    $aus_mysql = "weber"

    if($aus_mysql == "Weber") // falsche

    Ich habe mir mal die anderen Postings von Dir angeschaut! Es ist ganz sinnvoll bei Fehlern, mal das SQL-Statement mit dem mySQL.Monitor zu testen. Dann kannst Du sehen, ob dasSQL Fehler enthält oder der Fehler beim PHP liegt. mysql_error() hilt auch ganz schön weiter!

    MfG, André Laugks

    1. Hallo !

      Irre ich mich, oder geht deine Antwort komplett an der eigentlichen Fragestellung vorbei?

      Was Marco meinte, war doch wohl eher, dass der String-Vergleich im SQL-Statement nicht case sensitive ist.

      Wenn ich ferner nicht irre (getestet habe ich das ausnahmsweise einmal nicht), müsste sich dieser Umstand dadurch ändern lassen, dass man dem Datenfeld bei Definition das keyword BINARY zuweist, wodurch der String-Vergleich dann case sensitive wird.

      Im MySQL-Handbuch heißt es hierzu z.B.:

      "CHAR(M) [binary] :
      A fixed length string that is always filled up with spaces to the specified length. Range 1 - 255 characters. All end space are removed when retrieved. Is sorted and compared case insensitively unless the binary keyword is given."
      (Bei mir Kapitel 7.2 "Column types".)

      HTH

      Gruß,

      kerki

      1. Hallo!

        Wenn ich ferner nicht irre (getestet habe ich das ausnahmsweise einmal nicht), müsste sich dieser Umstand dadurch ändern lassen, dass man dem Datenfeld bei Definition das keyword BINARY zuweist, wodurch der String-Vergleich dann case sensitive wird.

        "CHAR(M) [binary] :

        Wo ich jetzt Dein Posting lese, hast Du wohl rechts. Ja, wenn Du bei den Feldern BINARY angibst, unterscheidet mySQL Groß -und Kleinschreibung. Man kann über 'ALTER TABLE tabname MODIFY ... ' die Eigenschaften einer Spalte ändern.

        Ich denke, ein Spalte mit BINARY zu belegen, kann weit reichende Folgen haben. Was ist, wenn Du in den Spalten suchen möchtest, also Eingaben eines Users entgebennimmst? Der User muß bei seiner Eingabe die Groß - und Kleinschreibung beachten oder täusche ich mich?

        MfG, André Laugks

        1. Hallo !

          Ich denke, ein Spalte mit BINARY zu belegen, kann weit reichende Folgen haben. Was ist, wenn Du in den Spalten suchen möchtest, also Eingaben eines Users entgebennimmst? Der User muß bei seiner Eingabe die Groß - und Kleinschreibung beachten oder täusche ich mich?

          Genau diese case sensitive Suche, also die Unterscheidung zwischen Groß- und Kleinschreibung, war aber doch gewünscht. ;-)

          Ob sich diese generelle Einstellung jetzt aber für einzelne Vergleiche abstellen lässt, bei denen diese Unterscheidung nicht gewünscht wird, weiß ich nicht.

          Ich vermute aber, dass sich das realisieren läßt, indem man sowohl Datenbankfeld wie auch Suchbegriff vor dem Vergleich mittels geeigneter Funktion in Kleinbuchstaben umwandelt, z.B.:

          SELECT * FROM kunden WHERE lower(name)='lower(MeIeR)'
          (ohne Gewähr)

          Gruß,

          kerki

          1. Hallo,

            Ich denke, ein Spalte mit BINARY zu belegen, kann weit reichende Folgen haben. Was ist, wenn Du in den Spalten suchen möchtest, also Eingaben eines Users entgebennimmst? Der User muß bei seiner Eingabe die Groß - und Kleinschreibung beachten oder täusche ich mich?

            Genau diese case sensitive Suche, also die Unterscheidung zwischen Groß- und Kleinschreibung, war aber doch gewünscht. ;-)
            Ob sich diese generelle Einstellung jetzt aber für einzelne Vergleiche abstellen lässt, bei denen diese Unterscheidung nicht gewünscht wird, weiß ich nicht.
            SELECT * FROM kunden WHERE lower(name)='lower(MeIeR)'

            Man kann auch innerhalb des WHERE-Statement mit 'BINARY' arbeiten (zumindest mit neueren Versionen :-)). Einfach mal mit 'mysql' testen, ob es akzeptiert wird.
            Bei (http://ahnenforschung.net/advanced/set_options.php) kann man das 'binary' in der Bedingung in Aktion sehen (z.B.: "feld regexp binary '[[:<:]]query[[:>:]]'" was nebenbei auch noch Wortgrenzen berücksichtigt). Also denke ich, daß es zumindest ab Version 3.23.36 funktioniert :-)

            Gruß AlexBausW

            1. Hallo !

              Man kann auch innerhalb des WHERE-Statement mit 'BINARY' arbeiten (zumindest mit neueren Versionen :-))

              Dies scheint bei älteren Versionen so nicht zu funktionieren.

              Wohl aber findest dich in meinem MySQL-Manual zu Version 3.21.29-gamma ein eigener Absatz *hüstel* zu der Frage (Absatz 15.8 "Case sensitivity in searches").

              In diesem wird ganz etwas anderes empfohlen, nämlich die Verwendung der Funktionen INDEX(column, string) bzw. STRCMP(column, string).

              Zu BINARY steht zudem in Kapitel 7 folgende Warnung:
              "BINARY is 'sticky' which means that if a column marked BINARY is used in a expression, the whole expression is compared BINARY."

              Bei Bedarf ;-) werde ich einmal testen, welche der vielen Möglichkeiten denn nun die beste ist.

              Gruß,

              kerki

              1. hallo... :-)
                es geht mir eben nur darum:
                ich habe eine userdatenbank...
                es gibt da nun leider zwei user: zuerst mal mich (marco) und dann noch einen (Marco)...
                ich habe die datenbank in mysql übernommen jedoch habe ich probleme beim ändern mit em folgenden komando:
                z.b. beim login...
                $abfrage="UPDATE nutzer SET nutzer_sid='$sid_aktuell', nutzer_login=NOW() WHERE nutzer_name='$namerein'";
                $erg = mysql_db_query("adressen",$abfrage,$verbindung);

                MFG Marco

                1. Hallo !

                  $abfrage="UPDATE nutzer SET nutzer_sid='$sid_aktuell', nutzer_login=NOW() WHERE nutzer_name='$namerein'";

                  Hast du schon irgendeinen der hier im Thread genannten Lösungsvorschläge ausprobiert? Wenn ja, mit welchem Ergebnis? Wenn nein, warum nicht?

                  Egal, probiere ob das so klappt:

                  .... WHERE STRCMP(nutzer_name, $namerein)=0;
                  bzw.
                  .... WHERE STRCMP(nutzer_name, '$namerein')=0;

                  lt. Handbuch sollte das klappen.

                  Gruß,

                  kerki

                  1. Vielen Dank Leute! :-)

                    mit where strcmp  geht es endlich... :-)) *freu*

                    .... WHERE STRCMP(nutzer_name, '$namerein')=0;

                    MFG MARCO