2016-04-30 15 views
1

ich Mysql verwende ich ein Feld haben, die Art varchar(50) und Name ist email ist und wenn ich eine Abfrage wie folgt auszuführen:Wo Feld = 0 gibt alle Datensätze

SELECT * FROM `users` WHERE email =0 

Es gibt alle Datensätze auf dem Tisch . Wie ist das möglich?

Beispiel:

Aufzeichnungen einer von ihnen: [email protected] und diese Abfrage gibt auch diese Zeile.

Warum passiert das und wie vermeidet man diese Situation?

+0

Was versuchen Sie mit diesem Test zu erreichen. Wenn Sie 'NULL's filtern wollen, müssen Sie' IS NULL' schreiben ... –

+0

Nein, ich habe diese Abfrage in der Liste der langsamen Abfragen gesehen. –

+0

Wenn Sie eine E-Mail mit varchar haben, vergleichen Sie sie mit Anführungszeichen wie 'email = '0'' oder' email =' ''... vergleicht sie mit einer Nummer, versucht sie wahrscheinlich alle Ihre E-Mails in Zahlen umzuwandeln und zu vergleichen mit Null, die eine beliebige Zeichenfolge gibt eine 1 zurück, die wahr ist –

Antwort

2

Wenn Sie ein Zeichenfolgenfeld mit einer Zahl vergleichen, wird die Zeichenfolge in eine Zahl konvertiert und anschließend mit diesen Zahlen verglichen. Bei der Umwandlung einer Zeichenfolge in eine Zahl wird die Nummer am Anfang der Zeichenfolge verwendet. Wenn es nicht mit einer Zahl beginnt, wird es in 0 konvertiert.

Also wenn Sie eine E-Mail wie [email protected] hätte, würde es nicht zurückgegeben werden, weil das in 12 konvertiert. Aber [email protected] konvertiert zu 0.

Sie sollten WHERE email = '0' schreiben, um es mit einer Zeichenfolge anstelle einer Zahl zu vergleichen. Oder wenn Sie eine leere E-Mail testen möchten, verwenden Sie WHERE email = ''.

Verwandte Themen