In einer meiner Tabellen befindet sich ein automatisch inkrementierendes ID-Feld. Es gibt auch ein anderes Feld (richter_code) mit einer eindeutigen Einschränkung, aber im Laufe der Jahreszeiten kann sich dieses Feld ändern - deshalb verwende ich es nicht als Primärschlüssel.
Im Code meines Programms habe ich eine Ladefunktion. Überprüfen Sie zunächst das Feld richter_code auf den Suchparameter. Wenn nichts zurückgegeben wird, durchsucht es das ID-Feld nach demselben Parameter.
Das Problem ist, dass der Wert abgeschnitten zu werden scheint, sobald er auf ein Alpha-Zeichen stößt. Ich bekomme also vollständigen Müll von meiner Abfrage. Siehe zum Beispiel Screenshot. Kann ich verhindern, dass MySQL die Abfrage ändert?
SELECT * FROM cloths WHERE CAST(id AS VARCHAR) = "3R100C"
Id
Spalte eine geschäftliche Bedeutung? Warum sollte das Programm überhaupt versuchen, es für eine Suche zu verwenden?VARCHAR
durchCHAR
und Sie sollten bereit sein zu gehen.Antworten:
Muss MySql lieben;)
Ich suchte im Stapelüberlauf nach einer MySQL-
isnumeric
Funktion, die einer Funktion entspricht , und fand diese .Diese ziemlich verschlungene WHERE-Klausel würde die erwarteten 0 Zeilen zurückgeben:
Die Idee ist, den Parameter nur dann abzugleichen,
Id
wenn es sich um einen gültigen numerischen Wert handelt . Ich hoffe es hilft!Ich würde eine tatsächliche
isinteger
Funktion erstellen, um diesen Wahnsinn zu abstrahieren:Trotzdem halte ich es nicht für richtig, ein automatisch inkrementiertes
Id
Feld als Such-Fallback-Spalte zu verwenden - diese ID ist der Primärschlüssel Ihrer Tabelle, ihre Bedeutung gehört ausschließlich der Datenbankseite, kein Programm sollte sich jemals darum kümmern, noch weniger Benutzer eines Programms.quelle
else null
anstelle vonelse -1
WHEN CAST(CAST('3R100C' AS int) AS char) = '3R100C'
Das Problem hierbei ist, dass MySQL beim Vergleich eine implizite Konvertierung von der Zeichenfolge in eine int durchführt.
Wenn Sie die Konvertierung explizit machen, macht MySQL Folgendes:
Stattdessen möchten Sie die ID in eine Zeichenfolge umwandeln und auf diese Weise vergleichen. Die Lösung ist einfach:
Dadurch entfällt die Notwendigkeit für die Behandlung / Analyse von Ganzzahlen auf der Zeichenfolgenseite.
quelle