Mailinglisten-Archive |
Tim Hildebrandt wrote:
>
> Ich habe heute durch Zufall festgestellt, dass das Anmelden eines Benutzers,
> dessen Usernamen ich in einer DB-Tabelle gespeichert habe bei einem
> Vergleich
> mittels PHP nicht zwischen Gross und Kleinschreibung unterscheidet.
$ php -q
<?
$name1="markus";
$name2="Markus";
if($name1==$name2) { print("gleich"); } else{ print("ungleich"); }
ungleich
Der Vergleich mittels PHP unterscheidet sehr wohl zwischen Gross- und
Kleinschreibung. Der Vergleich mittels MySQL tut es u.U. nicht:
mysql> select vorname,nachname from benutzer where nachname='dobel';
+---------+----------+
| vorname | nachname |
+---------+----------+
| Markus | Dobel |
+---------+----------+
1 row in set (0.00 sec)
Das liegt daran, dass Du das Feld, welches den Namen beinhaltet, beim
erzeugen der Tabelle als CHAR oder VARCHAR definiert hast, ohne die
MySQL-Dokumentation gruendlich zu lesen:
CHAR(M) [BINARY]
A fixed-length string that is always right-padded with spaces to
the specified length when stored. The range of M is 1 to 255 characters.
Trailing spaces are removed when the value is retrieved. CHAR values are
sorted and compared in case-insensitive fashion unless the BINARY
keyword is given.
VARCHAR(M) [BINARY]
A variable-length string. Note: Trailing spaces are removed when
the value is stored (this differs from the ANSI SQL specification). The
range of M is 1 to 255 characters. VARCHAR values are sorted and
compared in case-insensitive fashion unless the BINARY keyword is given.
Wie Du die Korrektur an deiner Tabelle nachtraeglich durchfuehrst, ohne
Daten zu verlieren, steht ebenfalls in der MySQL-Dokumentation unter
ALTER TABLE:
mysql> alter table benutzer change nachname nachname varchar(32) binary;
Query OK, 400 rows affected (0.04 sec)
Datensätze: 400 Duplikate: 0 Warnungen: 0
mysql> select vorname,nachname from benutzer where nachname='dobel';
Empty set (0.01 sec)
Gruss, Markus
php::bar PHP Wiki - Listenarchive