Achim: SQL - SELECT ignoriert Groß- und Kleinschreibung

Hallo und frohe Weihnachten für alle !!!

Vielleicht ist ein lieber Weihnachtsmann unter Euch,
der mir eine Antwort auf meine Frage schenken kann.

mySQL-Abfrage in Perl, es soll festgestellt werden, ob der
User "Karl" in der Spalte "name" in der Tabelle "user"
vorhanden ist. "Karl" wohlgemerkt, "karl" interessiert nicht !
Die folgende Funktion überprüft das, ihr Rückgabewert
läßt sich dann als Boolescher Wert prüfen:

sub isentry
{
my $ex=$dbh->prepare("SELECT id FROM user WHERE name='Karl'");
$ex->execute;
my @entry=$ex->fetchrow_array;
return ($entry[0]);
}

Das Dumme: "karl" wird a u c h gefunden.

Man kann nun einen regulären Ausdruck verwenden:

...WHERE name REGEXP '^Karl$'... statt
...WHERE name='Karl'...

Das geht, 'karl' wird übergangen.

Ist das nun aber der korrekte Weg ?
Ich habe mich sehr gewundert, daß das überhaupt passiert,
ein String-Vergleich mit '=' sollte doch die Groß- und
Kleinschreibung berücksichtigen !!?

Gruß Achim.

  1. Hallo!

    mySQL-Abfrage in Perl, es soll festgestellt werden, ob der
    User "Karl" in der Spalte "name" in der Tabelle "user"
    vorhanden ist. "Karl" wohlgemerkt, "karl" interessiert nicht !

    my $ex=$dbh->prepare("SELECT id FROM user WHERE name='Karl'");

    VARCHAR kenn kein Unterschied zwischen Groß -und Kleinschreibung.

    Du muß BINARY verwenden.

    SELECT id FROM user WHERE BINARY name='Karl'

    MfG, André Laugks
    L-Andre @ gmx.de

  2. Hallo,

    Man kann nun einen regulären Ausdruck verwenden:

    ...WHERE name REGEXP '^Karl$'... statt
    ...WHERE name='Karl'...

    Ja, das ist eine Möglichkeit. Die von MySQL selbst vorgeschlagene ist INSTR oder STRCMP zu nutzen.

    http://www.mysql.com/doc/en/Case_sensitivity.html

    weihnachticher Gruß

    Axel