2016-08-03 6 views
0

Kann jemand bitte helfen Sie mir das MySQL-Auswahlabfrage Verhalten zu verstehen und mir helfen, dieses Problem zu lösen,MySQL Integer-Spalte mit String-Suche gibt das ungültige Ergebnis

Wie keine Ergebnisse Nachricht auf Benutzersuche basierend gefunden zeigen?

Tabellenstruktur:

CREATE TABLE `dummytable` (
    `id` int(11) NOT NULL AUTO_INCREMENT, 
    `mobile` int(11) NOT NULL, 
    `welcome` varchar(150) NOT NULL, 
    PRIMARY KEY (`id`) 
) ENGINE=MyISAM AUTO_INCREMENT=4 DEFAULT CHARSET=latin1 

enter image description here

Frage: Warum ich dieses Ergebnis bin immer?

SELECT * FROM `dummytable` WHERE `mobile` = '\'\'' LIMIT 50 


enter image description here

+0

Wenn wir hinzufügen, WHERE 'mobile' = 'okay' ist auch das gleiche Ergebnis. Jeder kann helfen, dieses – Sundar

Antwort

2

Die Säule mobile wird als Ganzzahl erklärt. Wenn MySQL eine Ganzzahl mit einer Zeichenfolge vergleicht, konvertiert sie die Zeichenfolge in eine Zahl - nicht umgekehrt.

Wie macht MySQL das? Es konvertiert die führenden numerischen Zeichen in eine Zahl. Ihr Zustand ist:

WHERE mobile = '''' 

(. Die traditionelle SQL Art und Weise einen Apostroph in einer Zeichenfolge zu setzen ist, es zu verdoppeln)

Der Apostroph kein numerisches Zeichen ist, so dass die Konvertierungsergebnisse in 0 . Und das ist das Ergebnis, das du bekommst.

+0

zu lösen, wie man das löst. Wenn Leute auf Eingabefeld ok suchen, dann wird das Ergebnis ungültig. Wie löst man das, in diesem Fall muss ich keine Ergebnisse gefunden haben. – Sundar

+0

Testen Sie den Eingabewert außerhalb der Datenbank. Wenn Sie von PHP kommen, machen Sie den Test dort. – Marcus

1

Ihre Spalte mobil ist eine Ganzzahlspalte. Alles wird also in int umgewandelt. Eine leere Zeichenkette wird auf 0 umgewandelt (und andere Zeichenfolge nicht mit der Startnummer wird auch auf Null umgewandelt werden, glaube ich)

+0

ja, wenn wir hinzufügen WHERE 'mobile' = 'okay' ist auch die gleichen Ergebnisse – Sundar

1

Nach der Ausführung dieser Abfrage MySQL zeigt eine Warnmeldung angezeigt:

mysql> select * from foo where bar_integer='\'\'' 

.... 

10 rows in set, 1 warning (0.01 sec) 

mysql> show warnings; 
+---------+------+------------------------------------------+ 
| Level | Code | Message         | 
+---------+------+------------------------------------------+ 
| Warning | 1292 | Truncated incorrect DOUBLE value: 'okay' | 
+---------+------+------------------------------------------+ 

MySQL versucht, den Zeichenfolgenwert in den Zieltyp (Ganzzahl) zu konvertieren. Wenn die Konvertierung fehlschlägt, interpretiert mysql ihn als 0, was zu dem führt, was Sie sehen.

Wenn Sie den strikten Modus von MySQL aktivieren, würde diese Abfrage einen Fehler erzeugen, anstatt diese implizite Umwandlung zu erstellen.

+0

wie Sie das lösen .. Wenn die Leute in Ordnung auf Eingabefeld suchen, dann wird das Ergebnis ungültig. Wie das zu lösen ist, In diesem Fall muss ich keine Ergebnisse anzeigen – Sundar

+0

Sie sollten Benutzereingaben auf Client-Seite validieren, bevor Sie mysql abfragen. Es ist kein MySQL-Problem. –

Verwandte Themen