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