web-dev-qa-db-fra.com

# 1273 - Classement inconnu: Cpanel 'utf8mb4_unicode_ci'

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!

154
Wairimu Murigi

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>";
}

?>
100
Stephen

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.

228
Evster

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).

123
Rangel R. Morais

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
35
halilintar8

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.

27
Mark Thomson

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.

22
SherylHohman

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

15
Isk1n

Après de longues recherches, j'ai trouvé la solution pour ce qui précède:

  1. Tout d'abord, vous modifiez le fichier wp-config.php> Base de données DB_CHARSET defaultto "utf8" 

  2. Cliquez sur l'onglet "Exporter" pour la base de données

  3. Cliquez sur le bouton radio "Personnalisé".

  4. 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.

  5. Faites défiler vers le bas et cliquez sur aller

Alors vous êtes sur.

9
Dead Boyz

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é).

7
flomei

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 

Explication

$ 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.

2
Andrea

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).

1
raBne

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. 

1
Damian Walsh

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à.

0
John