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

Prozessdiagramm für die Ideenbereitstellung und Tomcat-Dienstimplementierung

Konfigurieren Sie zunächst die Projektartefakte K...

Detailliertes Tutorial zur Installation der MySQL 8.0.20-Datenbank auf CentOS 7

Weiterführende Literatur: MySQL8.0.20-Installatio...

Erfahrungsaustausch über die Priorität des Ladens von CSS-Stilen

Während der Projektentwicklung bin ich gestern auf...

Konvertierung von virtuellem Dom in reales Dom mit Vue

Es gibt eine andere Baumstruktur Javascript-Objek...

So stellen Sie einen Redis 6.x-Cluster über Docker bereit

Systemumgebung: Redis-Version: 6.0.8 Docker-Versi...

Diskussion über sinnvollere Erstellungsregeln für MySQL-String-Indizes

Vorwort In Bezug auf die Verwendung von MySQL-Ind...

Gründe, warum MySQL-Abfragen langsam sind

Inhaltsverzeichnis 1. Wo ist die Langsamkeit? 2. ...