J'ai une base de données wordpress sur mon ordinateur local que je souhaite transférer sur un phpMyAdmin hébergé sur Cpanel. Cependant, lorsque j'essaie d'importer la base de données dans l'environnement, cette erreur persiste.
#1273 - Unknown collation: 'utf8mb4_unicode_ci'
J'ai essayé de chercher sur Google et la seule solution que je puisse trouver est celle-ci erreur phpmysql - # 1273 - # 1273 - Classement inconnu: 'utf8mb4_general_ci' qui, à l'heure actuelle, n'est pas d'une grande aide. J'ai essayé de supprimer les cookies, mais cela ne fonctionne toujours pas. S'il vous plaît aider!
J'ai eu le même problème car tous nos serveurs exécutent des versions plus anciennes de MySQL. Cela peut être résolu en exécutant un script PHP. Enregistrez ce code dans un fichier et exécutez-le en entrant le nom de la base de données, l'utilisateur et le mot de passe. Le classement de utf8mb4/utf8mb4_unicode_ci
sera remplacé par utf8/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>";
}
?>
La technique dans ce post a fonctionné pour moi
1) Cliquez sur l'onglet "Exporter" pour la base de données
2) Cliquez sur le bouton radio "Personnalisé".
3) Accédez à la section intitulée "Options de format spécifiques" et modifiez le menu déroulant "Système de base de données ou ancien serveur MySQL afin d'optimiser la compatibilité de sortie avec:" de NONE à MYSQL40.
4) Faites défiler vers le bas et cliquez sur "GO".
Je ne suis pas sûr que cela provoque une perte de données, mais je ne l'avais pas remarqué la première fois que je l'ai essayé. Personne non plus n'a répondu aux forums liés à ci-dessus.
Edit 8/12/16 - Je pense que l'exportation d'une base de données de cette façon me fait perdre les données enregistrées dans Visual Studio de Black Studio TinyMCE widgets, bien que je n'ai pas exécuté plusieurs tests pour confirmer.
La meilleure chose à faire est d'exporter votre base de données vers .sql
, ouvrez-la dans Notepad ++ et allez à "Rechercher et remplacer". Ensuite, vous mettez "utf8mb4" sur la recherche et "utf8" on remplace. Il remplacera le utf8mb4_unicode_ci en utf8_unicode_ci . Maintenant, allez dans votre PhpMyAdmin (destination) et définissez le classement de la base de données sur utf8_unicode_ci
(Opérations> Classement).
j'utilise ceci sous 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
puis restaurez votre_fichier.sql
mysql -uyourdbuser -pyourdbpasswd yourdb < your_file.sql
Wordpress 4.2 a introduit le support du codage de caractères "utf8mb4" pour pour des raisons de sécurité , mais seul MySQL 5.5.3 et plus récent le prend en charge. Le programme d’installation (et le programme de mise à jour) le gère, c’est qu’il vérifie votre version de MySQL et que votre base de données sera mise à niveau vers utfmb4 uniquement si elle est prise en charge.
Cela semble bien en théorie, mais le problème (comme vous l'avez découvert) réside dans la migration des bases de données d'un serveur MySQL prenant en charge utf8mb4 vers un autre. Alors que l'inverse devrait fonctionner, il s'agit essentiellement d'une opération à sens unique.
Comme le souligne Evster, vous pourriez réussir à utiliser la fonction "Exporter" de PHPMYAdmin. Utilisez la méthode "Export: Custom" et, pour que le système "Database ou un ancien serveur MySQL optimise la compatibilité de sortie avec:", sélectionnez "MYSQL 40".
Pour une exportation en ligne de commande en utilisant mysqldump. Regardez le drapeau:
$ mysqldump --compatible=mysql4
Remarque: S'il y a des caractères de 4 octets dans la base de données, ils seront corrompus.
Enfin, pour tous ceux qui utilisent le populaire WP plug-in Migrate DB PRO, un utilisateur de ce fil de discussion Wordpress.org indique que la migration est toujours gérée correctement, mais que rien n'a été trouvé de manière officielle.
Le plug-in WP Migrate DB convertit la base de données d'un classement à un autre lorsqu'elle déplace des sites 4.2 entre des hôtes dotés de MySQL antérieure ou postérieure à la version 5.5.3.
Pour le moment, il ne semble pas y avoir de moyen de désactiver la mise à jour de la base de données. Ainsi, si vous utilisez un flux de travail permettant de migrer un site de Un serveur ou un hôte local avec MySQL> 5.5.3 vers un site utilisant une version plus ancienne de MySQL, vous risquez de ne pas avoir de chance.
Dans mon cas, il s'avère que mon
nouveau serveur fonctionnait MySQL 5.5
,
L’ancien serveur fonctionnait MySQL 5.6
.
J'ai donc eu cette erreur en essayant d'importer le fichier .sql
que j'avais exporté depuis mon ancien serveur.
MySQL 5.5 ne supporte pas utf8mb4_unicode_520_ci
, mais
MySQL 5.6 fait.
La mise à jour vers MySQL 5.6
sur le nouveau serveur a résolu le classement de l'erreur!
Si vous souhaitez conserver MySQL 5.5, vous pouvez:
- faire une copie de votre fichier .sql
exporté
- remplacer les instances de utf8mb4unicode520_ci
et utf8mb4_unicode_520_ci
... avec utf8mb4_unicode_ci
- importer votre fichier .sql
mis à jour.
Il y a une ligne dans wp-config.php:
define('DB_CHARSET', 'utf8mb4');
Si vous suivez les instructions de Markouver // Evster , n'oubliez pas de modifier cette ligne sur le serveur de production en
define('DB_CHARSET', 'utf8');
afin de réparer les caractères cassés de 4 octets
Après de longues recherches, j'ai trouvé la solution pour ce qui précède:
Tout d'abord, vous modifiez le fichier wp-config.php> Base de données DB_CHARSET defaultto "utf8"
Cliquez sur l'onglet "Exporter" pour la base de données
Cliquez sur le bouton radio "Personnalisé".
Allez dans la section intitulée "Options spécifiques au format" et modifiez le fichier liste déroulante pour "Système de base de données ou ancien serveur MySQL afin d’optimiser la compatibilité de sortie avec:" de NONE à MYSQL40.
Faites défiler vers le bas et cliquez sur aller
Alors vous êtes sur.
On dirait que votre hôte ne fournit pas de version MySQL capable d'exécuter des tables avec le classement utf8mb4.
Les tables WordPress ont été modifiées en utf8mb4 avec la version 4.2 (publiée le 23 avril 2015) pour prendre en charge Emojis, mais vous avez besoin de MySQL 5.5.3 pour l'utiliser. 5.5.3. date de mars 2010, il devrait donc normalement être largement disponible. Pouvez-vous vérifier si votre hébergeur fournit cette version?
Sinon, et si une mise à niveau n'est pas possible, vous devrez peut-être rechercher un autre hébergeur pour exécuter les dernières versions de WordPress (et vous devriez toujours le faire pour des raisons de sécurité).
J'ai donc résolu de cette manière, de MySQL 5.6 à MySQL 5.5:
$ mysqldump -u username -p --compatible=mysql4 database_name > database_name.sql
$ sed -i 's/TYPE=InnoDB/ENGINE=InnoDB/g' database_name.sql
(Facultatif) Créez un fichier .sql.gz
:
$ gzip database_name.sql
$ mysqldump -u username -p --compatible=mysql4 database_name > database_name.sql
Comme expliqué dans cette answer , ceci est simplement l'équivalent de cette option de phpMyAdmin: "Système de base de données ou ancien serveur MySQL pour optimiser la compatibilité de sortie avec:" dropdown, sélectionnez "MYSQL 40".
$ sed -i 's/TYPE=InnoDB/ENGINE=InnoDB/g' database_name.sql
Nous avons besoin de cela pour résoudre ce problème:
ERREUR 1064 (42000) à la ligne 18: vous avez une erreur dans votre syntaxe SQL; Consultez le manuel correspondant à la version de votre serveur MySQL pour connaître la syntaxe à utiliser près de 'TYPE = InnoDB' à la ligne 9.
Le moyen le plus simple consiste à exporter votre base de données au .sql
, à l'ouvrir dans le Bloc-notes ++ et à "rechercher et remplacer" le utf8mb4_unicode_ci
au utf8_unicode_ci
et également remplacer le utf8mb4
au utf8
. N'oubliez pas également de modifier le classement de la base de données en utf8_unicode_ci
(Opérations> Classement).
J'ai aussi vécu ce problème. La solution qui a fonctionné pour moi consistait à ouvrir une base de données locale avec Sequel Pro et mettre à jour Encodage et classement en utf8/utf8_bin pour chaque table avant l'importation.
ouvrez le fichier SQL sur Notepad ++ et ctrl + H.
Ensuite, placez "utf8mb4
" dans la recherche et "utf8
" dans replace . Le problème sera corrigé à ce moment-là.