# 1273 - Unbekannte Sortierung: 'utf8mb4_unicode_ci' cPanel

183

Ich habe eine WordPress-Datenbank auf meinem lokalen Computer, die ich auf ein gehostetes phpMyAdmin auf cPanel übertragen möchte. Wenn ich jedoch versuche, die Datenbank in die Umgebung zu importieren, wird immer wieder der folgende Fehler angezeigt:

#1273 - Unknown collation: 'utf8mb4_unicode_ci' 

Ich habe versucht, Google zu durchsuchen, und die einzige Lösung, die ich finden kann, ist dieser eine phpmysql-Fehler - # 1273 - # 1273 - Unbekannte Sortierung: 'utf8mb4_general_ci', was derzeit keine große Hilfe ist. Ich habe versucht, die Cookies zu löschen, aber es funktioniert immer noch nicht. Bitte helfen Sie!

Wairimu Murigi
quelle
Welche Version von WordPress? Siehe make.wordpress.org/core/2015/04/02/the-utf8mb4-upgrade
Rick James

Antworten:

107

Ich hatte das gleiche Problem, da auf allen unseren Servern ältere Versionen von MySQL ausgeführt werden. Dies kann durch Ausführen eines PHP-Skripts gelöst werden. Speichern Sie diesen Code in einer Datei und führen Sie ihn unter Eingabe des Datenbanknamens, des Benutzers und des Kennworts aus. Dadurch wird die Sortierung von utf8mb4/utf8mb4_unicode_ciin geändertutf8/utf8_general_ci

<!DOCTYPE html>
<html>
<head>
  <title>DB-Convert</title>
  <style>
    body { font-family:"Courier New", Courier, monospace; }
  </style>
</head>
<body>

<h1>Convert your Database to utf8_general_ci!</h1>

<form action="db-convert.php" method="post">
  dbname: <input type="text" name="dbname"><br>
  dbuser: <input type="text" name="dbuser"><br>
  dbpass: <input type="text" name="dbpassword"><br>
  <input type="submit">
</form>

</body>
</html>
<?php
if ($_POST) {
  $dbname = $_POST['dbname'];
  $dbuser = $_POST['dbuser'];
  $dbpassword = $_POST['dbpassword'];

  $con = mysql_connect('localhost',$dbuser,$dbpassword);
  if(!$con) { echo "Cannot connect to the database ";die();}
  mysql_select_db($dbname);
  $result=mysql_query('show tables');
  while($tables = mysql_fetch_array($result)) {
          foreach ($tables as $key => $value) {
           mysql_query("ALTER TABLE $value CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci");
     }}
  echo "<script>alert('The collation of your database has been successfully changed!');</script>";
}

?>
Stephen
quelle
47
Dies scheint wie Overkill vsmysqldump --compatible=mysql4
icc97
2
Bei mir hat es geklappt. Denken Sie daran, die Datei zu benennendb-convert.php
Fred K
1
Wenn Sie 'localhost' zu einer Eingabe machen, ist dies perfekt.
Br4nnigan
2
mysqldump --compatible=mysql4oder die Antwort unten ist eine bessere Option. Ich halte es nicht für eine kluge Idee, so etwas auf einer Live-Site zu ändern. Besser im richtigen Format exportieren oder, falls dies keine Option ist, die exportierte Datei bearbeiten.
Tisch
Du hast mir gerade das Leben gerettet und alles, was ich dir geben kann, ist +1.
Taruc
229

Die Technik in diesem Beitrag hat bei mir funktioniert

1) Klicken Sie auf die Registerkarte "Exportieren" für die Datenbank

2) Klicken Sie auf das Optionsfeld "Benutzerdefiniert"

3) Gehen Sie zum Abschnitt "Formatspezifische Optionen" und ändern Sie die Dropdown-Liste für "Datenbanksystem oder älterer MySQL-Server, um die Ausgabekompatibilität mit:" von NONE auf MYSQL40 zu maximieren.

4) Scrollen Sie nach unten und klicken Sie auf "GO".

Ich bin mir nicht sicher, ob dies zu Datenverlust führt, aber als ich es einmal ausprobiert habe, habe ich keinen bemerkt. Auch niemand, der in den oben verlinkten Foren geantwortet hat.

Bearbeiten 8/12/16 - Ich glaube, dass das Exportieren einer Datenbank auf diese Weise dazu führt, dass ich Daten verliere, die in den Widgets von Black Studio TinyMCE Visual Editor gespeichert sind , obwohl ich nicht mehrere Tests zur Bestätigung ausgeführt habe.

Evster
quelle
hat bei mir nicht funktioniert, ich habe den Fehler # 1231 - Variable 'character_set_client' kann nicht auf den Wert von 'NULL' gesetzt werden
Nerdess
Nach mehreren fehlgeschlagenen Versuchen mit anderen Lösungen funktionierte dieser beim ersten Versuch perfekt.
Vincent Polisi
Funktioniert NICHT mit einigen neuen Wordpress-Sites. Beim Importieren auf den anderen Server wird dieser Fehler in der allerersten Tabelle generiert, die importiert werden soll (wp_commentmeta). # 1064 - Sie haben einen Fehler in Ihrer SQL-Syntax. Überprüfen Sie das Handbuch, das Ihrer MySQL-Serverversion entspricht, auf die richtige Syntax für 'TYPE = MyISAM AUTO_INCREMENT = 1' in Zeile 19
that-ben
Dies schien keinen Unterschied für mich zu machen, da immer noch die gleichen Fehlermeldungen
angezeigt wurden
Sie sind der Chef
Aseel Ashraf
159

Wenn Sie bereits eine .sqlDatei exportiert haben, suchen und ersetzen Sie am besten Folgendes, wenn Sie sie in Ihrer Datei haben:

  • utf8mb4_0900_ai_ci zu utf8_unicode_ci
  • utf8mb4 zu utf8
  • utf8_unicode_520_ci zu utf8_unicode_ci

Es wird ersetzen utf8mb4_unicode_cizu utf8_unicode_ci. Jetzt gehen Sie zu Ihrem phpMyAdmin cPanel und setzen die DB-Sortierung utf8_unicode_ciüber Operations> Collation auf .

Wenn Sie nach a exportieren, .sqlist es besser, das Format für den Export der Datei zu ändern. Schauen Sie sich Evsters Antwort an (sie befindet sich auf derselben Seite wie diese).

Rangel R. Morais
quelle
2
es funktioniert perfekt zusammen mit diesem einen stackoverflow.com/a/30694416/1022726
iurii
Für alle Unix-Leute : sed -i.bak s/utf8mb4/utf8/g FILE_NAME. Dadurch werden alle Vorkommen utf8mb4in FILE_NAME gefunden und durch ersetzt, utf8während eine Kopie der Originaldatei in FILE_NAME.bak gespeichert wird. Möglicherweise müssen Sie es optimieren, um die genaue Koalition in Ihrem Fall anzugeben, aber dies ist ein Anfang :)
DaveLak
1
Ich musste auch ersetzen: utf8_unicode_520_ci durch: utf8_unicode_ci
Nick Rivers
Oder via vi: vi dump.sqlund dann in via mach das : :%s/uf8mb4/utf8/g.
Valentin Grégoire
2
und ersetzen utf8_0900_ai_cidurchutf8_unicode_ci
Irfan Yusanif
44

Ich benutze dies unter Linux:

sed -i 's/utf8mb4/utf8/g' your_file.sql
sed -i 's/utf8_unicode_ci/utf8_general_ci/g' your_file.sql
sed -i 's/utf8_unicode_520_ci/utf8_general_ci/g' your_file.sql

Stellen Sie dann your_file.sql wieder her

mysql -u yourdBUser -p yourdBPasswd yourdB < your_file.sql
halilintar8
quelle
1
Es gibt einen Kommentar zu einer anderen Antwort, der hier wiederholt werden muss. Die OS X-Version von sed erfordert ein zusätzliches Argument nach dem Flag -i. Funktioniert also sed -i '' .....
Kent
2
Ich musste das auch ausführen:sed -i 's/utf8_0900_ai_ci/utf8_general_ci/g' your_file.sql
Michael Hays
28

Wordpress 4.2 hat aus Sicherheitsgründen die Unterstützung für die Zeichencodierung "utf8mb4" eingeführt , jedoch nur von MySQL 5.5.3 und höher. Das Installationsprogramm (und der Updater) überprüfen dies so, dass es Ihre MySQL-Version überprüft und Ihre Datenbank nur dann auf utfmb4 aktualisiert wird, wenn dies unterstützt wird .

Das klingt theoretisch großartig, aber das Problem (wie Sie festgestellt haben) besteht darin, dass Sie Datenbanken von einem MySQL-Server, der utf8mb4 unterstützt, auf einen Server migrieren, der dies nicht tut. Während der umgekehrte Fall funktionieren sollte, handelt es sich im Grunde genommen um eine Einwegoperation.

Wie von Evster hervorgehoben, könnten Sie mit der "Export" -Funktion von PHPMYAdmin erfolgreich sein. Verwenden Sie " Exportmethode: Benutzerdefiniert " und für das " Datenbanksystem oder einen älteren MySQL-Server, um die Ausgabekompatibilität zu maximieren mit: " Dropdown-Liste " MYSQL 40 ".

Für einen Befehlszeilenexport mit mysqldump. Schauen Sie sich die Flagge an:

$ mysqldump --compatible=mysql4

Hinweis: Wenn die Datenbank 4-Byte-Zeichen enthält, werden diese beschädigt.

Für alle, die das beliebte WP Migrate DB PRO-Plugin verwenden, meldet ein Benutzer in diesem Wordpress.org-Thread , dass die Migration immer ordnungsgemäß durchgeführt wird, ich jedoch nichts offizielles finden konnte.

Das WP Migrate DB-Plugin übersetzt die Datenbank von einer Kollatierung in die andere, wenn 4.2 Sites zwischen Hosts mit MySQL vor oder nach 5.5.3 verschoben werden

Derzeit scheint es keine Möglichkeit zu geben, die Datenbankaktualisierung zu deaktivieren. Wenn Sie also einen Workflow verwenden, in dem Sie eine Site von einem Server oder einem lokalen Host mit MySQL> 5.5.3 auf einen Site migrieren, der eine ältere MySQL-Version verwendet, haben Sie möglicherweise kein Glück.

Mark Thomson
quelle
Das Ändern der Kompatibilität auf "MYSQL 40" hat bei mir völlig funktioniert.
Keryn Gill
3
Wenn Sie dann versuchen, den mysql4-kompatiblen Speicherauszug in eine Datenbank nach Version 5.5.3 zu importieren (ich verwende 5.5.28), schlägt dies fehl, da das Skript enthält TYPE=MyISAM, das in Version 5.1 entfernt wurde. Führen Sie eine Suche durch und ersetzen Sie sie durch ENGINE=MyISAM. Mit den mysqldumpAusgabeoptionen konnte ich keinen Weg finden, dies zu umgehen.
icc97
26

In meinem Fall stellte sich heraus, dass mein
neuer Server lief MySQL 5.5, der
alte Server lief MySQL 5.6.
Beim Versuch, die .sqlvon meinem alten Server exportierte Datei zu importieren, trat diese Fehlermeldung auf .

MySQL 5.5 unterstützt nicht utf8mb4_unicode_520_ci,
MySQL 5.6 jedoch.

Durch das Aktualisieren MySQL 5.6auf den neuen Server wurde der Fehler behoben!

Wenn Sie MySQL 5.5 beibehalten möchten, können Sie:
- eine Kopie Ihrer exportierten .sqlDatei erstellen
- Instanzen von utf8mb4unicode520_ciund ersetzenutf8mb4_unicode_520_ci
... durch utf8mb4_unicode_ci
- Ihre aktualisierte .sqlDatei importieren .

SherylHohman
quelle
1
Ja - das Hochladen auf 5.6 ist die einfachste Lösung dafür (und Ubuntu hat ein mysql-server-5.6Paket, das Sie installieren können, das 5.5 automatisch für Sie entfernt).
William Turrell
15

In wp-config.php gibt es eine Zeile:

define('DB_CHARSET', 'utf8mb4');

Wenn Sie den Anweisungen von Markouver / Evster folgen , vergessen Sie nicht, diese Zeile auf dem Produktionsserver in zu ändern

define('DB_CHARSET', 'utf8');

um defekte 4-Byte-Zeichen zu beheben

Isk1n
quelle
1
Vergessen Sie auch nicht, auch zu ändern define('DB_COLLATE', 'utf8_general_ci');. Das hat mir geholfen.
Abduhafiz
10

Nach langer Recherche habe ich die Lösung für oben gefunden:

  1. Zuerst ändern Sie die Standardeinstellung wp-config.php> Database DB_CHARSET in "utf8".

  2. Klicken Sie auf die Registerkarte "Exportieren" für die Datenbank

  3. Klicken Sie auf das Optionsfeld "Benutzerdefiniert"

  4. Gehen Sie zum Abschnitt "Formatspezifische Optionen" und ändern Sie die Dropdown-Liste für "Datenbanksystem oder älterer MySQL-Server, um die Ausgabekompatibilität zu maximieren mit:" von NONE auf MYSQL40.

  5. Scrollen Sie nach unten und klicken Sie auf Los

Dann bist du dran.

Toter Boyz
quelle
7

Ihr Host bietet anscheinend keine MySQL-Version, mit der Tabellen mit der Sortierung utf8mb4 ausgeführt werden können.

Die WordPress-Tabellen wurden mit Version 4.2 (veröffentlicht am 23. April 2015) in utf8mb4 geändert, um Emojis zu unterstützen. Sie benötigen jedoch MySQL 5.5.3, um es zu verwenden.5.5.3. ist ab März 2010, sollte also normalerweise allgemein verfügbar sein. Können Sie überprüfen, ob Ihr Hoster diese Version bereitstellt?

Wenn dies nicht der Fall ist und ein Upgrade nicht möglich ist, müssen Sie möglicherweise nach einem anderen Hoster Ausschau halten, um die neuesten WordPress-Versionen auszuführen (und dies sollten Sie aus Sicherheitsgründen immer tun).

Flomei
quelle
1
Sie können Ihre Version von MySQL über die Befehlszeile mit "mysql -V"
Edd Smith
2

Also habe ich auf diese Weise von MySQL 5.6 bis MySQL 5.5 gelöst:

$ mysqldump -u username -p --compatible=mysql4 database_name > database_name.sql
$ sed -i 's/TYPE=InnoDB/ENGINE=InnoDB/g' database_name.sql

(Optional) Erstellen Sie eine .sql.gzDatei:

$ gzip database_name.sql 

Erläuterung

$ mysqldump -u username -p --compatible=mysql4 database_name > database_name.sql

Wie in dieser Antwort erläutert , entspricht dies nur den Optionen von phpMyAdmin: "Datenbanksystem oder älterer MySQL-Server zur Maximierung der Ausgabekompatibilität mit:" Dropdown-Auswahl "MYSQL 40" .

$ sed -i 's/TYPE=InnoDB/ENGINE=InnoDB/g' database_name.sql

Wir brauchen dies, um dieses Problem zu lösen:

FEHLER 1064 (42000) in Zeile 18: Sie haben einen Fehler in Ihrer SQL-Syntax. Überprüfen Sie das Handbuch, das Ihrer MySQL-Serverversion entspricht, auf die richtige Syntax für 'TYPE = InnoDB' in Zeile 9

Andrea
quelle
1
Beachten Sie, wenn Sie die OS X-Version von sed verwenden : $ sed -i'' 's/TYPE=InnoDB/ENGINE=InnoDB/g' database_name.sql. Wenn Sie eine Kopie wie database_name.sql.bakvor dem sed behalten möchten, ersetzen Sie:$ sed -i'bak' 's/TYPE=InnoDB/ENGINE=InnoDB/g' database_name.sql
Justin Fortier
Sie können auch inline sed.
Davidbitton
Auch wenn Sie mysqldump unter MySQL 8 ausführen, müssen Sie die --compatible=ansiOption
AbstractVoid
1

Ich habe dieses Problem auch erlebt. Die Lösung, die für mich funktioniert hat, bestand darin, die lokale Datenbank mit Sequel Pro zu öffnen und die Codierung und Sortierung vor dem Import für jede Tabelle auf utf8 / utf8_bin zu aktualisieren .

Damian Walsh
quelle
1

Am einfachsten exportieren Sie Ihre Datenbank in .sql, öffnen sie in Notepad ++ und "Suchen und Ersetzen" utf8mb4_unicode_ciin utf8_unicode_ciund ersetzen utf8mb4durch utf8. Vergessen Sie auch nicht, die Datenbankkollatierung in utf8_unicode_ci(Operationen> Kollatierung) zu ändern .

Brane
quelle
0

Öffnen Sie die SQL-Datei in Notepad ++ und ctrl + H. setzen Sie " utf8mb4" bei der Suche und " utf8" beim Ersetzen. Das Problem wird dann behoben.

John
quelle
Es heißt "unbekannte Kollation utf8"
Cristian Traìna