Detaillierte Untersuchung, ob bei der MySQL-Fuzzy-Abfrage zwischen Groß- und Kleinschreibung unterschieden wird

Detaillierte Untersuchung, ob bei der MySQL-Fuzzy-Abfrage zwischen Groß- und Kleinschreibung unterschieden wird

Vorwort

Vor kurzem war ich damit beschäftigt, ein kleines persönliches Blog-Projekt zu schreiben. Beim Implementieren der Funktion „Globale Suche“ habe ich festgestellt, dass MySQL-Fuzzy-Abfrageanweisungen ein wenig magisch sind (ich bin gerade erst in die Programmierphase eingestiegen, also bringe ich Sie vielleicht zum Lachen, hahaha). Manchmal unterscheiden MySQL-Fuzzy-Abfrageanweisungen zwischen Groß- und Kleinschreibung , und manchmal unterscheiden MySQL-Abfrageanweisungen nicht zwischen Groß- und Kleinschreibung . Ich habe also viele Experimente durchgeführt und bin zu den folgenden Schlussfolgerungen gekommen (es können einige Fehler enthalten sein, ich bin herzlich eingeladen, auf meine Mängel hinzuweisen, und ich bin herzlich eingeladen, mit Freunden über das Problem zu diskutieren!)

Lassen Sie uns zunächst COLLATE vorstellen. COLLATE bezieht sich normalerweise auf die Datencodierung (CHARSET). Im Allgemeinen unterstützt jedes CHARSET mehrere COLLATEs und jedes CHARSET gibt ein COLLATE als Standardwert an. Beispielsweise lautet das Standard-COLLATE für die Kodierung Latin1 „latin1_swedish_ci“ , das Standard-COLLATE für die Kodierung GBKgbk_chinese_ci “ und das Standard-COLLATE für die Kodierung UTF8MB4utf8mb4_general_ci“ :

CHSRSET SORTIMENT
Latein1 latin1_swedish_ci
gbk gbk_chinese_ci
utf8mb4 utf8mb4_general_ci
utf8 utf8_bin

Interessierte Freunde können es selbst in Datenbankvisualisierungstools wie Navicate ausprobieren:




Hinweis : In MySQL gibt es zwei Kodierungen: utf8 und utf8mb4 . Allerdings unterstützt utf8 in MySQL nur Zeichenkodierungen mit einer Länge von bis zu 3 Bytes. Daher wird empfohlen, das Kodierungsformat utf8mb4 zu wählen.

Lösung 1

Wie in der Abbildung gezeigt, habe ich hier zwei identische Datenbanken eingerichtet, um die Unterscheidung zu erleichtern und Freunden ein besseres Verständnis zu ermöglichen. Eine davon verwendet das UTF-8- Kodierungsformat und die andere das UTF-8MB4 -Format:

Groß-/Kleinschreibung beachten

Die Anweisung zur Tabellenerstellung verwendet auch das UTF-8- Kodierungsformat:

Anweisung „Tabelle erstellen“

blog_test: UTF-8-Kodierungsformat

Namen festlegen utf8;
Setzen Sie FOREIGN_KEY_CHECKS = 0;

-- ----------------------------
-- Tabellenstruktur für t_blog
-- ----------------------------
Tabelle löschen, wenn `t_blog` vorhanden ist;
CREATE TABLE `t_blog` (
  `id` bigint(20) NICHT NULL AUTO_INCREMENT,
  `Wertschätzung` bit(1) NICHT NULL,
  `comment_tabled` bit(1) NICHT NULL,
  `Inhalt` Langtext Zeichensatz utf8 COLLATE utf8_bin NULL,
  `create_time` datetime(0) NULL DEFAULT NULL,
  `first_picture` varchar(255) ZEICHENSATZ utf8 SORTIMENT utf8_bin NULL STANDARD NULL,
  `flag` varchar(255) ZEICHENSATZ utf8 SORTIMENT utf8_bin NULL STANDARD NULL,
  `veröffentlicht` bit(1) NICHT NULL,
  `empfehlen` bit(1) NICHT NULL,
  `share_statement` bit(1) NICHT NULL,
  `title` varchar(255) ZEICHENSATZ utf8 SORTIMENT utf8_bin NULL STANDARD NULL,
  `update_time` datetime(0) NULL DEFAULT NULL,
  `Ansichten` int(11) NULL DEFAULT NULL,
  `type_id` bigint(20) NULL DEFAULT NULL,
  `Benutzer-ID` bigint(20) NULL DEFAULT NULL,
  `Beschreibung` varchar (255) Zeichensatz utf8 COLLATE utf8_bin NULL DEFAULT NULL,
  PRIMÄRSCHLÜSSEL (`id`) MIT BTREE,
  INDEX `FK292449gwg5yf7ocdlmswv9w4j`(`Typ-ID`) mit BTREE,
  INDEX `FK8ky5rrsxh01nkhctmo7d48p82`(`Benutzer-ID`) USING BTREE,
  CONSTRAINT `FK292449gwg5yf7ocdlmswv9w4j` FOREIGN KEY (`type_id`) REFERENZEN `t_type` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT,
  CONSTRAINT `FK8ky5rrsxh01nkhctmo7d48p82` FOREIGN KEY (`user_id`) REFERENZEN `t_user` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT
) ENGINE = InnoDB AUTO_INCREMENT = 14 CHARACTER SET = utf8 COLLATE = utf8_bin ROW_FORMAT = Dynamisch;

Datenbankinhalte

Abfrageergebnisse wählen Sie * aus t_blog , wo title wie „%html%“ aussieht;

Wählen Sie * aus t_blog , wo title wie „%HTML%“ aussieht.

abschließend:

MySQL verwendet das UTF-8-Kodierungsformat und bei Fuzzy-Abfragen wird zwischen Groß- und Kleinschreibung unterschieden.

Groß-/Kleinschreibung wird nicht beachtet.

Anweisung „Tabelle erstellen“

Die Anweisung zur Tabellenerstellung verwendet auch das UTF-8-MB4 -Kodierungsformat:

blog_test2: utf8mb4-Kodierungsformat

Namen festlegen utf8mb4;
Setzen Sie FOREIGN_KEY_CHECKS = 0;

-- ----------------------------
-- Tabellenstruktur für t_blog
-- ----------------------------
Tabelle löschen, wenn `t_blog` vorhanden ist;
CREATE TABLE `t_blog` (
  `id` bigint(20) NICHT NULL AUTO_INCREMENT,
  `Wertschätzung` bit(1) NICHT NULL,
  `comment_tabled` bit(1) NICHT NULL,
  `Inhalt` Langtext Zeichensatz utf8mb4 COLLATE utf8mb4_general_ci NULL,
  `create_time` datetime(0) NULL DEFAULT NULL,
  `first_picture` varchar(255) ZEICHENSATZ utf8mb4 SORTIMENT utf8mb4_general_ci NULL STANDARD NULL,
  `flag` varchar(255) ZEICHENSATZ utf8mb4 SORTIMENT utf8mb4_general_ci NULL STANDARD NULL,
  `veröffentlicht` bit(1) NICHT NULL,
  `empfehlen` bit(1) NICHT NULL,
  `share_statement` bit(1) NICHT NULL,
  `title` varchar(255) ZEICHENSATZ utf8mb4 SORTIMENT utf8mb4_general_ci NULL STANDARD NULL,
  `update_time` datetime(0) NULL DEFAULT NULL,
  `Ansichten` int(11) NULL DEFAULT NULL,
  `type_id` bigint(20) NULL DEFAULT NULL,
  `Benutzer-ID` bigint(20) NULL DEFAULT NULL,
  `Beschreibung` varchar (255) Zeichensatz utf8mb4 Sortiert utf8mb4_general_ci NULL Standard NULL,
  PRIMÄRSCHLÜSSEL (`id`) MIT BTREE,
  INDEX `FK292449gwg5yf7ocdlmswv9w4j`(`Typ-ID`) mit BTREE,
  INDEX `FK8ky5rrsxh01nkhctmo7d48p82`(`Benutzer-ID`) USING BTREE,
  CONSTRAINT `FK292449gwg5yf7ocdlmswv9w4j` FOREIGN KEY (`type_id`) REFERENZEN `t_type` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT,
  CONSTRAINT `FK8ky5rrsxh01nkhctmo7d48p82` FOREIGN KEY (`user_id`) REFERENZEN `t_user` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT
) ENGINE = InnoDB AUTO_INCREMENT = 14 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamisch;

Datenbankinhalte

Abfrageergebnisse wählen Sie * aus t_blog , wo title wie „%html%“ aussieht;

wählen

* von t_blog , wo title wie „%HTML%“ aussieht;

abschließend

MySQL verwendet das utf8mb4-Kodierungsformat und Fuzzy-Abfragen berücksichtigen keine Groß- und Kleinschreibung.

Lösung 2

Groß-/Kleinschreibung beachten

Verfahren

Geben Sie die erforderlichen Felder einzeln an (das Feld, bei dem hier zwischen Groß- und Kleinschreibung unterschieden werden muss, ist beispielsweise das Feld „Titel“ in der Tabelle „t_blog“) und verwenden Sie das Kodierungsformat „utf8“, und COLLATE verwenden Sie es als „utf8_bin“.

Tabelle ändern t_blog ÄNDERN `Titel` `Titel` varchar(255) ZEICHENSATZ utf8 SORTIMENT utf8_bin NULL STANDARD NULL;

abschließend

Wählen Sie * aus t_blog , wo title wie „%HTML%“ aussieht.

Wählen Sie * aus t_blog , wo title wie „%html%“ aussieht.

Aus den obigen Ausführungsergebnissen können wir ersehen, dass diese Methode die Groß-/Kleinschreibung der Fuzzy-Abfrageanweisung berücksichtigen kann.

Groß-/Kleinschreibung wird nicht beachtet.

Verfahren

Geben Sie die erforderlichen Felder einzeln an (das Feld, bei dem hier beispielsweise die Groß-/Kleinschreibung ignoriert werden muss, ist das Feld „Titel“ in der Tabelle „t_blog“) und verwenden Sie das Kodierungsformat „utf8mb4“, und COLLATE ist „utf8mb4_bin“:

Tabelle ändern t_blog ÄNDERN `Titel` `Titel` varchar(255) ZEICHENSATZ utf8mb4 SORTIMENT utf8mb4_bin NULL STANDARD NULL;

Fazit: Wählen Sie * aus t_blog , wobei title wie „%HTML%“ lautet.

Wählen Sie * aus t_blog , wo title wie „%html%“ aussieht.

Aus den obigen Ausführungsergebnissen können wir ersehen, dass diese Methode die Groß-/Kleinschreibung der Fuzzy-Abfrageanweisung ignorieren kann.

Lösung 3

Groß-/Kleinschreibung beachten

Verfahren

Wie in der Abbildung gezeigt, lautet das COLLATE des Felds „title“ der aktuellen Tabelle „t_blog“ „utf8mb4_general_ci“, wobei die Groß-/Kleinschreibung nicht beachtet wird.

Ändern Sie das Feld in BINARY:

Tabelle ändern t_blog CHANGE `title` `title` varchar(255) BINARY NULL DEFAULT NULL;
Tabelle „t_blog“ ändern, Spalte „Titel“ ändern, varchar (255) BINARY NULL DEFAULT NULL;

Wählen Sie eine der beiden Änderungsmethoden.

abschließend

Wählen Sie * aus t_blog , wo title wie „%HTML%“ aussieht.

Wählen Sie * aus t_blog , wo title wie „%html%“ aussieht.

Aus den obigen Ausführungsergebnissen können wir ersehen, dass die Änderung des Felds in BINARY dazu führen kann, dass die Fuzzy-Abfrageanweisung zwischen Groß- und Kleinschreibung unterscheidet .

Lösung 4

Groß-/Kleinschreibung beachten

Verfahren

Wie in der Abbildung gezeigt, lautet das COLLATE des Felds „title“ der aktuellen Tabelle „t_blog“ „utf8mb4_general_ci“, wobei die Groß-/Kleinschreibung nicht beachtet wird.

Fügen Sie vor dem Abfrageanweisungsfeld BINARY hinzu:

Wählen Sie * aus „t_blog“, wobei „Titel“ BINARY ist und „%html%“ lautet.

abschließend

Wählen Sie * aus t_blog , wo title wie „%html%“ aussieht.

Wählen Sie * aus t_blog , wo ein binärer title wie „%html%“ ist.

Aus den obigen Ausführungsergebnissen können wir erkennen, dass das Hinzufügen von BINARY vor dem Abfrageanweisungsfeld dazu führen kann, dass die Fuzzy-Abfrageanweisung zwischen Groß- und Kleinschreibung unterscheidet .

Lösung 5

(Es wird insbesondere nicht empfohlen, versuchen Sie, es nicht zu verwenden)

Suchen Sie die Datei my.ini unter der entsprechenden MySQL-Version, die für diesen Neuling der Version 8.0.17 entspricht.


Fügen Sie der letzten Zeile der Datei den folgenden Satz hinzu:

Kleinbuchstabentabellennamen = 1

Hinweis: 0: Groß-/Kleinschreibung beachten, 1: Groß-/Kleinschreibung nicht beachten

Starten Sie MySQL neu

An vielen Stellen habe ich noch nicht alles genau erklärt, deshalb möchte ich die Experten um Rat fragen! Wenn Sie mehr erfahren möchten, können Sie sich auf den Blog des Chefs (Anbetung) beziehen. MySQL unterscheidet zwischen Groß- und Kleinschreibung.

Zusammenfassen

Dies ist das Ende dieses Artikels darüber, ob MySQL-Fuzzy-Abfragen zwischen Groß- und Kleinschreibung unterscheiden. Weitere Informationen zur Groß- und Kleinschreibung von MySQL-Fuzzy-Abfragen finden Sie in den vorherigen Artikeln von 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, dass jeder 123WORDPRESS.COM in Zukunft unterstützen wird!

Das könnte Sie auch interessieren:
  • Einführung in vier Verwendungen von Fuzzy-Abfragen in MySQL
  • Detaillierte Einführung in die Verwendung von MySql wie Fuzzy-Abfrage-Platzhaltern
  • Implementierung einer MySQL-Einzeltabelle mit mehreren Schlüsselwörtern als Fuzzy-Abfrage
  • Zusammenfassung der MySQL-Fuzzy-Abfragen „Like“ und „Regexp“
  • Was tun, wenn Mybatis beim Eingeben chinesischer Zeichen mithilfe der MySQL-Fuzzy-Abfrage keine Ergebnisse abrufen kann?
  • Eine kurze Erläuterung zum Wildcard-Escape in MySQL-Fuzzy-Abfragen
  • PHP MYSQL implementiert zwei Hauptfunktionen: Login und Fuzzy-Abfrage
  • Detaillierte Einführung in die Verwendung von MySQL-Fuzzy-Abfragen LIKE und REGEXP
  • So lösen Sie das Problem der langsamen Geschwindigkeit von MySQL wie bei Fuzzy-Abfragen
  • Implementierung einer Fuzzy-Abfrage wie %% in MySQL

<<:  Analyse des Linux-Hochleistungsnetzwerk-IO- und Reaktormodells

>>:  Analyse des Ereignisschleifenmechanismus von JavaScript

Artikel empfehlen

MySQL-Datenbanktabelle und Datenbankpartitionierungsstrategie

Lassen Sie uns zunächst darüber sprechen, warum w...

Apple Mac OS X in VMWare12 installieren – Grafik-Tutorial

1. Einleitung: Da mein Freund einige Systemkenntn...

Implementierung der Nginx-Domänennamenweiterleitung für den HTTPS-Zugriff

Ein Wort vorab: Plötzlich erhielt ich die Aufgabe...

Beispielcode für die Codevorlage für die Linux C-Protokollausgabe

Vorwort Dieser Artikel stellt hauptsächlich den r...

Detaillierte Erklärung der Definition und Funktion von Trennzeichen in MySQL

Wenn Sie MySQL zum ersten Mal lernen, verstehen S...

IIS7 IIS8 http springt automatisch zu HTTPS (Port 80 springt zu Port 443)

IIS7 muss bestätigen, ob das pseudostatische Modu...

Vue verwendet MockJS, um simulierte Datenfalldetails zu generieren

Inhaltsverzeichnis Installieren Sie Mockjs in Ihr...