2017-05-12 1 views
1

Wir haben eine Tabelle mit einer Spalte criticality_id gespeichert als 0, 1, 2, 3, die undefined, A,B,C respectively darstellen. Einer meiner Kollegen möchte alle Elemente der Kritikalität zeigen C, aber er fragt accidentially die Datenbank mit einer falschen Abfrage:So vermeiden Sie falsche Datentypabfrage in MySQL

select * from mytable where criticality_id = 'C' 

Diese überraschend abgerufen alle Elemente mit criticality_id 0.

Nach einigen googeln Ich weiß, dass MySQL automatisch konvertiert, also hier 'C' = 0. Das Abfrageergebnis ist technisch korrekt aber sicher nicht was er will. Meine Frage ist, wie man solche Art von Mismatch vermeiden kann, um genau abgestimmtes Ergebnis zurückzugeben. Wenn keine übereinstimmt, gib nichts zurück.

+1

Wage ich sagen dokumentieren Sie Ihr Schema, damit die Leute wissen, was in welcher Spalte lebt – RiggsFolly

Antwort

0

Es sei denn, Sie arbeiten mit einer Sprache, die automatisch Datentypen einstellt. Sie müssen dokumentieren, wie Ihr Schema für Ihre Tabellen aussieht. Es ist unklug, zufällige Daten mit unbekanntem Typ aufzunehmen.

Nichts sollte jemals "mysteriöse Daten" sein, mit denen Sie arbeiten, abgesehen von einigen kleineren Ausnahmen.

1

Eine einfache, aber etwas vielseitige Lösung wäre, den Datentyp auf CHAR(1) zu ändern.

Dann:

criticality_id = '0' --> true when criticality is 0 
criticality_id = 0  --> true when criticality is 0 
criticality_id = 'C' --> false when criticality is 0 

Ich weiß nicht, ob es eine Einstellung ist implizite Konvertierung zu entfernen.

Verwandte Themen