Der folgende Fehler wird gemeldet, wenn MySQL mehrere Tabellen verknüpft: [Err]1267 – Unzulässige Mischung von Sortierungen (utf8_general_ci, IMPLICIT) und (utf8_unicode_ci, IMPLICIT) für Operation '= Dies bedeutet, dass die Sortierregeln (COLLATION) der beiden Tabellen unterschiedlich sind und der Vergleich nicht abgeschlossen werden kann. COLLATION wird zum Sortieren und Größenvergleich verwendet. Ein Zeichensatz hat eine oder mehrere COLLATIONen und endet mit _ci (ohne Berücksichtigung der Groß-/Kleinschreibung), _cs (mit Berücksichtigung der Groß-/Kleinschreibung) oder _bin (binär). Bei einem Vergleich sollten Sie darauf achten, dass die Zeichenreihenfolge beider Tabellen identisch ist. Normalerweise geben Sie es beim Erstellen einer Tabelle nicht an. Sie können die Standardeinstellung verwenden. Es gibt kein Problem, wenn alle Standardeinstellungen verwendet werden. Lassen Sie uns verschiedene Szenarien simulieren. Die Tabellenstruktur ist wie folgt (die Standardsortierregel für utf8 ist utf8_general_ci): mysql> anzeigen, Tabelle erstellen, test.cs\G *************************** 1. Reihe *************************** Tabelle: cs Tabelle erstellen: CREATE TABLE `cs` ( `id` int(11) DEFAULT NULL, `name` varchar(10) STANDARD NULL ) ENGINE=InnoDB STANDARD-CHARSET=utf8 1 Zeile im Satz (0,01 Sek.) Anzeigen des für eine Tabelle festgelegten Standardsortiersatzes mysql> wähle TABLE_SCHEMA,TABLE_NAME,TABLE_COLLATION aus information_schema.tables, wobei table_name='cs'; +--------------+------------+-----------------+ | TABELLE_SCHEMA | TABELLE_NAME | TABELLE_SAMMLUNG | +--------------+------------+-----------------+ | Test | cs | utf8_general_ci | +--------------+------------+-----------------+ 1 Zeile im Satz (0,00 Sek.) Spaltensortierungssatz anzeigen mysql> wähle TABLE_SCHEMA,TABLE_NAME,COLUMN_NAME,COLLATION_NAME aus information_schema.COLUMNS, wobei TABLE_NAME='cs'; +--------------+------------+-------------+-----------------+ | TABELLENSCHEMA | TABELLENNAME | SPALTENNAME | SORTIMENTSNAME | +--------------+------------+-------------+-----------------+ | Test | cs | ID | NULL | | Test | cs | Name | utf8_general_ci | +--------------+------------+-------------+-----------------+ 2 Zeilen im Satz (0,00 Sek.) Das Upgrade von UTF8 auf UTF8MB4 unterstützt kein Online-DDL: mysql> ALTER TABLE cs IN ZEICHENSATZ KONVERTIEREN utf8mb4, ALGORITHM=INPLACE, LOCK=NONE; FEHLER 1846 (0A000): ALGORITHM=INPLACE wird nicht unterstützt. Grund: Spaltentyp INPLACE kann nicht geändert werden. Versuchen Sie ALGORITHM=COPY. Das Ändern von utf8.utf8_general_ci zu utf8.utf8_unicode_ci unterstützt kein Online-DDL, wie folgt: mysql> ALTER TABLE cs IN ZEICHENSATZ KONVERTIEREN utf8 sortieren utf8_unicode_ci,ALGORITHM=INPLACE,LOCK=NONE; FEHLER 1846 (0A000): ALGORITHM=INPLACE wird nicht unterstützt. Grund: Spaltentyp INPLACE kann nicht geändert werden. Versuchen Sie ALGORITHM=COPY. Wenn Sie den Zeichensatz folgendermaßen ändern, werden Sie feststellen, dass nur die Tabellenebene geändert wird, nicht aber die Spaltenebene. mysql> ALTER TABLE cs CHARACTER SET utf8 collate utf8_unicode_ci; Abfrage OK, 0 Zeilen betroffen (0,01 Sek.) Datensätze: 0 Duplikate: 0 Warnungen: 0 mysql> wähle TABLE_SCHEMA,TABLE_NAME,TABLE_COLLATION aus information_schema.tables, wobei table_name='cs'; +--------------+------------+-----------------+ | TABELLE_SCHEMA | TABELLE_NAME | TABELLE_SAMMLUNG | +--------------+------------+-----------------+ | Test | cs | utf8_unicode_ci | +--------------+------------+-----------------+ 1 Zeile im Satz (0,00 Sek.) mysql> wähle TABLE_SCHEMA,TABLE_NAME,COLUMN_NAME,COLLATION_NAME aus information_schema.COLUMNS, wobei TABLE_NAME='cs'; +--------------+------------+-------------+-----------------+ | TABELLENSCHEMA | TABELLENNAME | SPALTENNAME | SORTIMENTSNAME | +--------------+------------+-------------+-----------------+ | Test | cs | ID | NULL | | Test | cs | Name | utf8_general_ci | +--------------+------------+-------------+-----------------+ 2 Zeilen im Satz (0,00 Sek.) Wenn Sie den Zeichensatz also wirklich ändern, vergessen Sie nicht, CONVERT TO wie folgt hinzuzufügen: mysql> ALTER TABLE cs IN ZEICHENSATZ KONVERTIEREN utf8 collate utf8_unicode_ci; Abfrage OK, 5 Zeilen betroffen (0,06 Sek.) Datensätze: 5 Duplikate: 0 Warnungen: 0 mysql> wähle TABLE_SCHEMA,TABLE_NAME,COLUMN_NAME,COLLATION_NAME aus information_schema.COLUMNS, wobei TABLE_NAME='cs'; +--------------+------------+-------------+-----------------+ | TABELLENSCHEMA | TABELLENNAME | SPALTENNAME | SORTIMENTSNAME | +--------------+------------+-------------+-----------------+ | Test | cs | ID | NULL | | Test | cs | Name | utf8_unicode_ci | +--------------+------------+-------------+-----------------+ 2 Zeilen im Satz (0,00 Sek.) Um den Standardzeichensatz für nur eine Tabelle zu ändern, verwenden Sie diese Anweisung: mysql> ALTER TABLE cs Standard-Zeichensatz utf8 sortieren utf8_general_ci, ALGORITHM=INPLACE, LOCK=NONE; Abfrage OK, 0 Zeilen betroffen (0,00 Sek.) Datensätze: 0 Duplikate: 0 Warnungen: 0 mysql> wähle TABLE_SCHEMA,TABLE_NAME,TABLE_COLLATION aus information_schema.tables, wobei table_name='cs'; +--------------+------------+-----------------+ | TABELLE_SCHEMA | TABELLE_NAME | TABELLE_SAMMLUNG | +--------------+------------+-----------------+ | Test | cs | utf8_general_ci | +--------------+------------+-----------------+ 1 Zeile im Satz (0,00 Sek.) mysql> wähle TABLE_SCHEMA,TABLE_NAME,COLUMN_NAME,COLLATION_NAME aus information_schema.COLUMNS, wobei TABLE_NAME='cs'; +--------------+------------+-------------+-----------------+ | TABELLENSCHEMA | TABELLENNAME | SPALTENNAME | SORTIMENTSNAME | +--------------+------------+-------------+-----------------+ | Test | cs | ID | NULL | | Test | cs | Name | utf8_unicode_ci | +--------------+------------+-------------+-----------------+ 2 Zeilen im Satz (0,00 Sek.) Sie können feststellen, dass sich der Spaltenzeichensatz nicht geändert hat und nur neue Spalten standardmäßig den Tabellenzeichensatz (utf8.utf8_general_ci) erben. Zusammenfassen Dies ist der gesamte Inhalt dieses Artikels zur Analyse verschiedener Fehlerprobleme in MySQL-Tabellensortierregeln. Ich hoffe, er wird für alle hilfreich sein. Interessierte Freunde können sich auf Folgendes beziehen: Mehrere wichtige MySQL-Variablen, Analyse der deklarierten MySQL-Variablen und gespeicherten Prozeduren, Detaillierte Code-Erklärung der Beziehung zwischen dem Binlog der MySQL-Masterbibliothek (Master-Log) und dem Relay-Log der Slave-Bibliothek, Detaillierte Erklärung des MySQL-Vorbereitungsprinzips usw. Wenn Sie Fragen haben, können Sie jederzeit eine Nachricht hinterlassen, um miteinander zu kommunizieren und gemeinsam Fortschritte zu erzielen. Das könnte Sie auch interessieren:
|
<<: JavaScript+HTML zur Implementierung eines Studenteninformationsmanagementsystems
>>: So erstellen Sie einen NFS-Dienst in Ubuntu 16.04
Was ist JDK? Nun, wenn Sie diese Frage nicht kenn...
Die Anzeige von Daten ist seit jeher eine Forderu...
Vorwort: Für die Implementierung digitaler Additi...
Wir alle wissen, dass wir die Eigenschaften der P...
DOKTYP Doctype wird verwendet, um dem Browser mit...
Inhaltsverzeichnis Mixins-Implementierung Zusamme...
Kürzlich habe ich mir angesehen, wie Docker es Co...
Auf dem Server läuft ein Taskprozess. Wenn wir ih...
In Gästebüchern, Foren und anderen Orten werden i...
Vorwort Verwenden Sie nginx zum Lastenausgleich. ...
1. Installieren Sie das systemübergreifende Datei...
1. Hintergrund Verwenden Sie LDAP, um betriebs- u...
Schritte zur Sicherung des SVN-Dienstes 1. Quells...
Voraussetzung ist die Eingabe der Bewertungsdaten...
In diesem Artikel wird der spezifische Code zur z...