Methode zum Vergleichen der Größe von Varchar-Typnummern in einer MySQL-Datenbank

Methode zum Vergleichen der Größe von Varchar-Typnummern in einer MySQL-Datenbank

Erstellen einer Testtabelle

-- ----------------------------
-- Tabellenstruktur für check_test
-- ----------------------------
Tabelle löschen, wenn `check_test` vorhanden ist;
Tabelle „check_test“ erstellen (
  `id` int(11) NICHT NULL AUTO_INCREMENT,
  `current_price` varchar(10) NICHT NULL,
  `Preis` varchar(10) NICHT NULL,
  PRIMÄRSCHLÜSSEL (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8;
 
-- ----------------------------
-- Aufzeichnungen von check_test
-- ----------------------------
INSERT INTO `check_test` VALUES ('1', '12', '14');
INSERT INTO `check_test` VALUES ('2', '22', '33');
INSERT INTO `check_test` VALUES ('3', '15', '8');
INSERT INTO `check_test` VALUES ('4', '9', '7');
INSERT INTO `check_test` VALUES ('5', '12', '12.9'); 

Wir führen das folgende SQL aus:

- Suchen Sie die Datensätze, bei denen current_price kleiner als price ist. Wählen Sie * aus check_test, wobei current_price<price; ist.
Wählen Sie * aus Check_Test, wobei (aktueller Preis + 0) < (Preis + 0);
 
- Suchen Sie die Datensätze, bei denen der aktuelle Preis größer als der Preis ist. Wählen Sie * aus check_test, wobei aktueller Preis > Preis liegt.
Wählen Sie * aus Check_Test, wobei (aktueller Preis + 0) > (Preis + 0);

Die Ergebnisse sind wie folgt:

Wir können sehen, dass in Ergebnis 1 15>8 die Bedingung nicht erfüllt, aber gefunden wird, während in Ergebnis 3 15>8 die Bedingung erfüllt, aber nicht gefunden wird.

Warum ist das so? Denn der Vergleich von Zahlen vom Typ String beginnt bei der ersten Ziffer und vergleicht den entsprechenden Wert im Zeichencode. Wenn sie gleich sind, wird mit dem Vergleich der zweiten Ziffer fortgefahren. Wenn sie nicht gleich sind, wird der größere Wert verglichen . Die den numerischen Zeichen entsprechenden ASCII-Codewerte lauten wie folgt:

Zum Beispiel:

  • Wenn current_price="12", price="14", ist der ASCII-Dezimalwert des ersten Zeichens "1" 49, was einander entspricht. Der ASCII-Dezimalwert des zweiten Zeichens "2" ist 50 und der ASCII-Dezimalwert von "4" ist 52. 50<52, also ist das Ergebnis korrekt.
  • Wenn current_price="15", price="8", dann ist der ASCII-Dezimalwert, der dem ersten Zeichen "1" in current_price entspricht, 49, und der ASCII-Dezimalwert, der dem ersten Zeichen "8" in price entspricht, ist 56, 49<56, also kann es abgefragt werden, aber es ist nicht das erwartete Ergebnis.

Wir können dies mithilfe von Code mit JavaScript überprüfen:

var aktueller_Preis = "12";
var Preis = "14";
console.log(aktueller_Preis < Preis); // wahr
 
var aktueller_Preis = "15";
var Preis = "8";
console.log(aktueller_Preis < Preis); // wahr

Daher sollten Zahlen, die möglicherweise verglichen werden müssen, nicht auf den Typ varchar gesetzt werden. Wenn sie jedoch auf den Typ varchar gesetzt wurden, konvertieren Sie sie zum Vergleichen in den numerischen Typ und fügen Sie dem Feld in SQL 0 hinzu.

Wenn es sich um eine Programmiersprache handelt, muss die Konvertierung über die entsprechende Funktion erfolgen und kann nicht direkt durch Hinzufügen von 0 konvertiert werden, z. B. JavaScript:

var aktueller_Preis = "12";
var Preis = "14";
console.log(parseInt(aktueller_Preis) < parseInt(Preis)); // wahr
 
var aktueller_Preis = "15";
var Preis = "8";
console.log(parseInt(aktueller_Preis) < parseInt(Preis)); // falsch

Hinweis: Der dem Zeichen entsprechende Dezimalwert hängt mit seiner Kodierung zusammen, der ASCII-Code ist jedoch kompatibel.

Referenzlinks:

Vergleich der Zahlen vom Typ String

Vergleich von Zeichenfolgen vom Typ VARCHAR

Vergleichen der Größe von Zahlen vom Typ varchar

Dies ist das Ende dieses Artikels zum Vergleichen der Größe von varchar-Zahlen in einer MySQL-Datenbank. Weitere Informationen zum Vergleichen der Größe von MySQL varchar-Zahlen finden Sie in den vorherigen Artikeln von 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, Sie werden 123WORDPRESS.COM auch in Zukunft unterstützen!

Das könnte Sie auch interessieren:
  • Einführung in Mysql Varchar-Größen- und Längenprobleme
  • So ermitteln Sie die Größe von MySQL VARCHAR

<<:  So entfernen Sie das blaue Kästchen, das angezeigt wird, wenn das Bild als Hyperlink verwendet wird

>>:  Über die 4 Zusatzfunktionen von Vuex

Artikel empfehlen

Lösen Sie das Problem verschwindender Docker-Images

1. Spiegelbilder verschwinden in 50 und 93 [root@...

Sechs Methoden zur Nginx-Optimierung

1. Optimieren Sie die Nginx-Parallelität [root@pr...

HTML+Sass implementiert HambergurMenu (Hamburger-Menü)

Vor ein paar Tagen habe ich mir ein Video von ein...

So laden Sie Komponentenbibliotheken von Drittanbietern bei Bedarf in Vue3

Vorwort Nehmen Sie Element Plus als Beispiel, um ...

Detaillierte Erklärung des einfachen Stores von Vue

Die einfachste Store-Anwendung in Vue ist die glo...

Erläuterung des MySQL-Abfragebeispiels anhand instanziierter Objektparameter

Dieser Artikel stellt vor, wie Sie durch Instanzi...

Allgemeine Struktur-Tags in XHTML

Struktur Text, Kopf, HTML, Titel Text abbr, Akron...

Kurze Analyse von MySQL Union und Union All

In der Datenbank führen sowohl die Schlüsselwörte...

JavaScript ist unzuverlässig undefiniert

undefined Wenn wir in JavaScript feststellen möch...

Beschreibung des Meta-Viewport-Attributs in der HTML-Webseite

Beschreibung der HTML-Meta-Viewport-Attribute Was...

Fallstricke basierend auf MySQL-Standardsortierregeln

Der Standardtyp varchar in MySQL ist case-insensi...