Einige Probleme, die durch inkonsistente MySQL-Kodierung verursacht werden können

Einige Probleme, die durch inkonsistente MySQL-Kodierung verursacht werden können

Gespeicherte Prozeduren und Codierung

Wenn in gespeicherten MySQL-Prozeduren die Kodierung der Tabelle und der Daten von der Standardkodierung der Datenbank und der gespeicherten Prozeduren abweicht, kann SQL den Index möglicherweise nicht verwenden, da MySQL eine entsprechende Kodierungskonvertierung für die Daten in der Bedingungsspalte durchführt. Im Folgenden sind die Tabellendaten beispielsweise latin1, und der MySQL-Parser führt einige Konvertierungen durch:

... WHERE Namensspalte = NAME_CONST('in_Namensspalte',_utf8'MP201022' COLLATE 'utf8_general_ci')

Sie können die entsprechende Kodierungskonvertierung in der gespeicherten Prozedur durchführen (normalerweise das varchar/char-Feld ändern), sodass der Index normal verwendet werden kann. Weitere Informationen finden Sie unter: mysql-slow-when-run-as-stored-proc

... WHERE namecolumn = convert(in_namecolumn using latin1) collate latin1_swedish_ci

JDBC-Direktverbindung zum Ausführen von SQL

Wenn beim Ausführen von SQL über eine JDBC-Verbindung die Kodierung inkonsistent ist, müssen auch die Typen varchar und char konvertiert werden, wie unten gezeigt:

... WHERE namecolumn = convert(in_namecolumn using latin1) collate latin1_swedish_ci

Andernfalls können die folgenden Fehler aufgrund von Kodierungsinkonsistenzen auftreten (je nach MySQL-Connector-Version kann das Verhalten variieren):

SQL-Status [HY000]: Fehlercode [1267]: Unzulässige Mischung von Sortierungen (latin1_swedish_ci,IMPLICIT) und (utf8mb4_general_ci,COERCIBLE) für Operation '='

Änderungen am JDBC-UseSSL-Parameter

In der mysql-connector-java-Konfiguration weist der Parameter useSSL die folgenden Unterschiede auf. Ab 5.1.38 ist useSSL standardmäßig für MySQL 5.5.45+, 5.6.26+ oder 5.7.6+ aktiviert. Die entsprechenden Parameter requireSSL und verifyServerCertificate werden ebenfalls aktiviert:

< 5.1.38:
 ConnectionProperties.useSSL=SSL bei der Kommunikation mit dem Server verwenden (true/false), Standardeinstellung ist „false“

>= 5.1.38
 ConnectionProperties.useSSL=SSL bei der Kommunikation mit dem Server verwenden (true/false), Standard ist „true“ bei einer Verbindung mit MySQL 5.5.45+, 5.6.26+ oder 5.7.6+, andernfalls ist der Standard „false“

MySQL 5.7.x und höher aktivieren SSL standardmäßig und der Client verhandelt automatisch die Verschlüsselung beim Herstellen einer Verbindung, sofern nicht ausdrücklich angegeben wurde, dass keine Verschlüsselung erfolgen soll. mysql-connector-java hat useSSL seit 5.1.38 standardmäßig aktiviert. Daher treten beim Herstellen einer Verbindung zu MySQL 5.7.x mit einer niedrigeren JDBC-Version keine Verschlüsselungsprobleme auf, jedoch beim Herstellen einer Verbindung zu 5.7.6+ mit einer höheren JDBC-Version. Sie müssen useSSL=false ausdrücklich angeben und beim Herstellen einer Verbindung zu MySQL 5.5, 5.6 mit einer höheren JDBC-Version treten keine Verschlüsselungsprobleme auf.

Dies ist das Ende dieses Artikels über einige Probleme, die durch inkonsistente MySQL-Kodierung verursacht werden können. Weitere Informationen zu Problemen, die durch inkonsistente MySQL-Kodierung verursacht werden, finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder durchsuchen Sie die verwandten Artikel weiter unten. Ich hoffe, dass jeder 123WORDPRESS.COM in Zukunft unterstützen wird!

Das könnte Sie auch interessieren:
  • Mehrere Lösungen für die verstümmelte chinesische Kodierung von UFT-8 in PHP und MySQL
  • So zeigen Sie die aktuelle Datenbankcodierung in MySQL an und ändern sie
  • So ändern Sie die Kodierungsmethode von Tabellen und Feldern in der MySQL-Datenbank
  • MySql ändert die Datenbankkodierung auf UTF8, um verstümmelte Zeichen zu vermeiden
  • So zeigen Sie die Zeichenkodierung in MySQL an und ändern sie
  • Lösung für verstümmelte Zeichen bei Verwendung der chinesischen UTF-8-Kodierung in der MySQL-Datenbank
  • Problem mit der MySQL-Datenbankkodierung (Datenbank-, Tabellen- und Feldkodierung auf UTF-8 ändern)
  • Ändern Sie die Standardkodierung von MySQL 5.5 (ändern Sie die Grafikschritte in die UTF-8-Kodierung).
  • Überprüfen und ändern Sie die MySQL-Kodierung, um Chinesisch zu unterstützen (GBK oder UTF8).
  • MySQL-Zeichenkodierungseinstellungsmethode

<<:  Mehrere Situationen, in denen Div durch Iframe abgedeckt ist, und ihre Lösungen

>>:  Implementierung der Einstellungen für virtuellen Nginx-Host basierend auf Domänenname, Port und unterschiedlicher IP

Artikel empfehlen

Linux wird geladen, vmlinux wird debuggt

Laden von Kernelsymbolen mit gdb arm-eabi-gdb out...

Detaillierte Erläuterung der MySQL-Benutzerrechteverwaltung

Inhaltsverzeichnis Vorwort: 1. Einführung in die ...

Zusammenfassung der vier Klick-Antwortmethoden von Button

Button wird ziemlich oft verwendet. Hier habe ich...

Einführung in die MySQL-Operatoren <> und <=>

<> Operator Funktion: Zeigt an, dass es ung...

Zusammenfassung des JS-Ausführungskontexts und -umfangs

Inhaltsverzeichnis Vorwort Text 1. Konzepte im Zu...

Implementierungscode zur Installation von vsftpd in Ubuntu 18.04

Installieren Sie vsftpd $ sudo apt-get installier...

Eine kurze Erläuterung zur Verwendung von Slots in Vue

Definition und Verwendung: Verwenden Sie die Slot...

Detaillierte Erklärung zur Verwendung des Grep-Befehls in Linux

1. Offizielle Einführung grep ist ein häufig verw...

Der Implementierungsprozess der Linux-Prozessnetzwerkverkehrsstatistik

Vorwort Linux verfügt über entsprechende Open-Sou...

Beispiel zum Referenzieren von Umgebungsvariablen in Docker Compose

In einem Projekt müssen Sie häufig Umgebungsvaria...

Über Tomcat kombiniert mit Atomikos zur Implementierung von JTA

Vor Kurzem hat das Projekt die Umgebung gewechsel...