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

HTML-Code einer Webseite: Erzeugung von Lauftext

In diesem Abschnitt beschreibt der Autor die spez...

CSS Acht auffällige HOVER-Effekt-Beispielcodes

1. Effekt-HTML senden <div id="senden-btn...

So erstellen Sie MySQL-Indizes richtig

Die Indizierung ähnelt dem Erstellen bibliografis...

So implementieren Sie eine steuerbare gepunktete Linie mit CSS

Vorwort Die Verwendung von CSS zum Generieren gep...

Grafisches Tutorial zur Installation und Konfiguration von MySQL 8.0.21

Notieren Sie die Installations- und Konfiguration...

Benutzerdefiniertes Auswahlfeld für die Webseite Auswählen

Jeder ist wahrscheinlich mit dem Auswahl-Dropdown...

Vue + Element realisiert Paging-Effekt

In diesem Artikelbeispiel wird der spezifische Co...

Berechnung des Prozentwerts, wenn die CSS-Positionseigenschaft absolut ist

Wenn die Position absolut ist, wird der Prozentsa...

Analyse des MySQL-Warnprotokolls zu abgebrochenen Verbindungen

Vorwort: Manchmal wird die mit MySQL verbundene S...