So lösen Sie das Problem der Groß-/Kleinschreibung bei MySQL-Abfragen

So lösen Sie das Problem der Groß-/Kleinschreibung bei MySQL-Abfragen

Frage

Als ich kürzlich ein praktisches Projekt mit dem SSH-Framework abschloss, stieß ich auf einen unerklärlichen Fehler, der mich lange störte. Schließlich habe ich ihn gelöst und wie folgt aufgezeichnet.

Frage: Beim Testen des Systems stellte ein Student plötzlich fest, dass das in der Datenbank gespeicherte Konto eigentlich „admin“ hätte sein sollen, der Student sich jedoch erfolgreich mit dem „Admin“-Konto anmeldete ...

...EXM? ? ? Ist das ok? Nun, ich sollte besser die Ursache dieses Fehlers herausfinden. Dann habe ich verschiedene Verfahren zur Fehlerbehebung ausprobiert, konnte jedoch keine Probleme finden. Schließlich dachte ich darüber nach, SQL-Anweisungen zu schreiben, um die Datenbank direkt statt über HQL abzufragen, und ich fand das Problem:

Wählen Sie * vom Benutzer, wobei Benutzername = „admin“ und Passwort = „admin“ ist.
Wählen Sie * vom Benutzer, wobei Benutzername = „Admin“ und Passwort = „admin“ ist.

Wenn Sie die beiden oben genannten SQL-Anweisungen verwenden, um die Tabelle separat abzufragen, sind die Ergebnisse überraschend identisch! ……! ! Gehen Sie zur Suchmaschine und suchen Sie nach den Schlüsselwörtern: MySQL-Abfragefall, und Sie werden das Problem finden! Bei MySQL-Abfragen wird die Groß-/Kleinschreibung nicht beachtet. Das hat mich wirklich schockiert. Obwohl ich wusste, dass bei Schlüsselwörtern im Allgemeinen nicht zwischen Groß- und Kleinschreibung unterschieden wird, hätte ich nicht erwartet, dass selbst bei den abzufragenden Parametern dies nicht der Fall ist! ! Versuchen Sie die folgende SQL-Anweisung erneut. Das Ergebnis ist immer noch dasselbe.

Wählen Sie * vom Benutzer, wobei Benutzername = „ADMIN“ und Passwort = „admin“ ist.

Lösung

Ich habe im Internet nach einem entsprechenden Artikel gesucht, der gut geschrieben ist. Ich werde die Artikelerklärung hier einfügen:

Die Standard-Zeichensuchstrategie von MySQL ist: utf8_general_ci, was bedeutet, dass die Groß-/Kleinschreibung nicht beachtet wird; utf8_general_cs bedeutet, dass die Groß-/Kleinschreibung beachtet wird; utf8_bin bedeutet binärer Vergleich, bei dem ebenfalls die Groß-/Kleinschreibung beachtet wird. (Hinweis: In MySQL 5.6.10 wird utf8_genral_cs nicht unterstützt!!! ! ! !)

Wenn Sie eine Tabelle erstellen, legen Sie die Collate-Eigenschaft der Tabelle direkt auf utf8_general_cs oder utf8_bin fest. Wenn die Tabelle bereits erstellt wurde, ändern Sie die Collation-Eigenschaft des Felds direkt auf utf8_general_cs oder utf8_bin.

-- Tabelle erstellen:
CREATE TABLE testt(
ID INT Primärschlüssel,
Name VARCHAR (32) NICHT NULL
)ENGINE = INNODB COLLATE = utf8_bin;
- Ändern Sie die Collation-Eigenschaft der Tabellenstruktur ALTER TABLE TABLENAME MODIFY COLUMN COLUMNNAME VARCHAR(50) BINARY CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL;

Ändern Sie einfach die SQL-Anweisung und fügen Sie das Schlüsselwort binary vor dem abzufragenden Feld hinzu.

- Fügen Sie vor jeder Bedingung das Schlüsselwort „binär“ hinzu: „select * from user“, wobei „binärer Benutzername = ‚admin‘ und „binäres Passwort = ‚admin‘“ ist.
-- Umgeben Sie die Parameter mit binary('') select * from user, wobei der Benutzername wie binary('admin') und das Passwort wie binary('admin'); lautet.

Hinweis: In meinem Projekt wird das Hibernate-Framework verwendet und die HQL-Anweisung ist kein SQL. „ from User where binary username = ? and binary password = ?; führt zu einem Fehler. Versuchen Sie es dann from User where username like binary(?) and password like binary(?); ohne Fehler. Der Grund ist derzeit unbekannt.

Zusammenfassen

Das Obige ist der vollständige Inhalt dieses Artikels. Ich hoffe, dass der Inhalt dieses Artikels einen gewissen Lernwert für Ihr Studium oder Ihre Arbeit hat. Vielen Dank für Ihre Unterstützung von 123WORDPRESS.COM. Wenn Sie mehr darüber erfahren möchten, schauen Sie sich bitte die folgenden Links an

Das könnte Sie auch interessieren:
  • Hinweise zur Groß-/Kleinschreibung bei MySQL
  • Bei MySQL-Zeichentypen wird die Groß-/Kleinschreibung beachtet.
  • So stellen Sie MySQL so ein, dass die Groß-/Kleinschreibung nicht beachtet wird
  • Analyse von Problemen, die durch die Groß-/Kleinschreibung von MySQL verursacht werden
  • Problem mit der Groß-/Kleinschreibung in der MySQL-Datenbank
  • Detaillierte Erläuterung der Konfigurationsmethode „Groß-/Kleinschreibung ignorieren“ für MySQL-Tabellennamen
  • Linux-System MySQL Passwort vergessen, Passwort zurücksetzen, Groß-/Kleinschreibung von Tabellen- und Spaltennamen ignorieren
  • So unterscheiden Sie Groß- und Kleinbuchstaben in Zeichenfolgen bei MySQL-Abfragen
  • Lösung für MySql-Abfragen ohne Berücksichtigung der Groß-/Kleinschreibung (zwei)
  • Auswahl der Groß-/Kleinschreibung von MySQL-Tabellennamen

<<:  Detaillierte Anweisungen zur Installation von Jenkins auf Ubuntu 16.04

>>:  Vue+SSH-Framework zur Realisierung von Online-Chat

Artikel empfehlen

Zusammenfassung der Anwendungspraxis für Docker-Container des Node.js-Dienstes

In diesem Artikel wird die Verwendung und Install...

Detaillierte Erläuterung der MySQL-Hochverfügbarkeitsarchitektur

Inhaltsverzeichnis Einführung MySQL-Hochverfügbar...

SASS Style Programmierhandbuch für CSS

Da immer mehr Entwickler SASS verwenden, müssen w...

Zusammenfassung wichtiger Komponenten von MySQL InnoDB

Innodb umfasst die folgenden Komponenten 1. innod...

Einführung in das MySQL Connection Control Plugin

Inhaltsverzeichnis 1. Einführung in das Verbindun...

Mysql | Detaillierte Erklärung der Fuzzy-Abfrage mit Platzhaltern (wie, %, _)

Wildcard-Kategorien: %Prozent-Platzhalter: Gibt a...

Das Prinzip und die Implementierung der bidirektionalen Bindung in Vue2.x

Inhaltsverzeichnis 1. Implementierungsprozess 2. ...

Der Prozess der Installation von Docker im Linux-System

In diesem Blog führe ich Sie in einfachen Schritt...

Mehrere Möglichkeiten zum Berechnen des Alters anhand des Geburtstags in MySQL

Ich habe MySQL vorher nicht sehr oft verwendet un...

So installieren Sie RabbitMQ schnell in Docker

1. Holen Sie sich das Bild #Geben Sie die Version...

Detaillierte Analyse des Flex-Layouts in CSS3

Das Flexbox-Layoutmodul soll eine effizientere Mö...