phpbar.de logo

Mailinglisten-Archive

[php] Username 1:1 =?iso-8859-1?Q?=FCberpr=FCfen?=

[php] Username 1:1 =?iso-8859-1?Q?=FCberpr=FCfen?=

Markus Dobel easy_(at)_ist.schuldig.de
Tue, 23 May 2000 22:49:41 +0200


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