Verwandte Lernempfehlungen: MySQL-Tutorial
Ich habe heute Überstunden gemacht, und die Verkäuferin kam zu uns, um die Daten zu überprüfen, und sagte, dass die Daten waren falsch. Ich habe gesehen, dass das SQL des Mädchens so geschrieben war:
select distinct * from prvt_pub_stmt_vnwhere issue_time >= '2020-08-01'and issue_time <= '2020-08-01'and prs_dmtd_cde in ('p','n');复制代码
Ich habe es analysiert und festgestellt, dass es kein Problem gibt, also habe ich den Codewert des Felds prs_dmtd_cde überprüft und festgestellt, dass es nicht nur Großbuchstaben P, sondern auch Kleinbuchstaben p gibt, aber Das Mädchen hat nur nachgesehen. Ohne das kleine p ist die Datenmenge viel größer.
Also habe ich das SQL des Mädchens geändert:
select distinct * from prvt_pub_stmt_vnwhere issue_time >= '2020-08-01'and issue_time <= '2020-08-01'and prs_dmtd_cde in ('p','n','P','N');复制代码
Die Ergebnisse waren die gleichen. Das ist es. . .
Natürlich kann man vor einem Mädchen nicht „nein“ sagen, also habe ich sie gebeten, zurückzukommen und einen Blick darauf zu werfen.
Ich habe schnell online nachgeschaut und festgestellt, dass es sich um ein Problem mit dem Codierungsformat und den Sortierregeln von MySQL handelt.
Unsere MySQL-Datenbank verwendet grundsätzlich das UTF8-Kodierungsformat, und es gibt verschiedene Sortierregeln für das UTF8-Kodierungsformat. Häufig verwendete sind die folgenden:
utf8_bin: Speichern Sie jedes Zeichen in der Zeichenfolge als hexadezimale Daten, wobei die Groß-/Kleinschreibung beachtet wird.
utf8_general_ci: Groß-/Kleinschreibung wird nicht beachtet, ci ist die Abkürzung für case insensitive, also case insensitive.
Überprüfen Sie noch einmal die Standard-Zeichensatzeinstellungen:
Zufällig lautet die Standardsortierregel des utf8-Codierungsformats: utf8_general_ci – also ohne Berücksichtigung der Groß- und Kleinschreibung.
Wenn die Ursache des Problems gefunden ist, können wir das richtige Mittel verschreiben.
Die Lösung besteht natürlich darin, das Sortierattribut des Felds direkt in utf8_bin zu ändern.
ALTER TABLE prvt_pub_stmt_vn CHANGE prs_dmtd_cde prs_dmtd_cde VARCHAR(255) CHARACTER SET utf8 COLLATE utf8_bin;复制代码
Es gibt eine andere Lösung, die nicht darin besteht, die ursprüngliche Tabellenstruktur zu ändern, sondern die SQL zu ändern. Fügen Sie das binäre Schlüsselwort vor dem Abfragefeld hinzu.
select distinct * from prvt_pub_stmt_vnwhere issue_time >= '2020-08-01'and issue_time <= '2020-08-01'and binary prs_dmtd_cde in ('p','n');复制代码
Bei der MySQL-Standardabfrage wird die Groß-/Kleinschreibung nicht beachtet. Sie können der SQL-Anweisung eine Binärdatei hinzufügen, um die Groß-/Kleinschreibung zu berücksichtigen.
binary ist keine Funktion, sondern ein Typkonvertierungsoperator. Er wird verwendet, um zu erzwingen, dass die Zeichenfolge dahinter eine Binärzeichenfolge ist. Beim Zeichenfolgenvergleich kann die Groß-/Kleinschreibung beachtet werden.
das Problem war gelöst, natürlich habe ich dem Mädchen erzählt, wie tiefgreifend das Problem war und wie ich die Prinzipien analysiert und es schließlich gelöst habe.
Wenn ich den bewundernden Blick des Mädchens sehe, bin ich natürlich sehr glücklich.
Das Wichtigste ist, sich an dieses Problem zu erinnern. Wenn Sie in Zukunft auf Geschäftsfälle stoßen, bei denen die Groß-/Kleinschreibung beachtet wird, sollten Sie beim Erstellen von Tabellen auf die Wahl des Zeichensatzes und der Sortierregeln achten, um zu verhindern, dass so etwas passiert Heute.
Wenn Sie mehr über das Erlernen des Programmierens erfahren möchten, achten Sie bitte auf die Spalte „PHP-Schulung“!
Das obige ist der detaillierte Inhalt vonNeues Verständnis der MySQL-Where-Abfrage. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!