J'ai un dump MySQL, que j'ai essayé de restaurer avec:
mysql -u"username" -p"password" --Host="127.0.0.1" mysql_db < mysql_db
Cependant, cela a jeté une erreur:
ERROR 1115 (42000) at line 3231: Unknown character set: 'utf8mb4'
Voici les lignes 3231 à 3233:
/*!50003 SET character_set_client = utf8mb4 */ ;
/*!50003 SET character_set_results = utf8mb4 */ ;
/*!50003 SET collation_connection = utf8mb4_general_ci */ ;
J'utilise MySQL 5.1.69. Comment puis-je résoudre cette erreur?
Votre version ne supporte pas ce jeu de caractères, je crois que c'est 5.5.3
qui l'a introduite. Vous devriez mettre à jour votre mysql vers la version que vous avez utilisée pour exporter ce fichier.
L'erreur est alors très claire: vous définissez un certain jeu de caractères dans votre code, mais votre version de mysql ne le prend pas en charge et ne le sait donc pas.
Selon https://dev.mysql.com/doc/refman/5.5/en/charset-unicode-utf8mb4.html :
utf8mb4 est un sur-ensemble d'utf8
alors peut-être y at-il une chance que vous puissiez simplement le faire utf8, fermez les yeux et espérez, mais cela dépend de vos données, et je ne le recommanderais pas.
Tu peux essayer:
Ouvrir le fichier sql par l'éditeur de texte rechercher et remplacer tout
utf8mb4 to utf8
Importer à nouveau.
Cela peut aider:
mysqldump --compatible=mysql40 -u user -p DB > dumpfile.sql
PHPMyAdmin a le même mode de compatibilité MySQL dans les options d’exportation "expert". Bien que cela n'a parfois rien fait.
Si vous n’avez pas accès via la ligne de commande ou via PHPMyAdmin, éditez le
/*!50003 SET character_set_client = utf8mb4 */ ;
bit à lire 'utf8'
uniquement, c’est la voie à suivre.
Il suffit d’ouvrir votre fichier SQL avec un éditeur de texte, de rechercher 'utf8mb4' et de le remplacer par utf8.J’espère que cela fonctionnera pour vous
Je réponds à la question - car je n'en ai trouvé aucune complète. Comme de nos jours , le jeu de caractères inconnu: 'utf8mb4' est assez répandu, de nombreux déploiements utilisant MySQL inférieur à 5.5.3 (version dans laquelle utf8mb4 a été ajouté).
L'erreur indique clairement que vous n'avez pas pris en charge utf8mb4
sur votre serveur de base de données stage.
Cause : vous avez probablement localement MySQL
version 5.5.3 ou supérieure et, sur VPS Stage/Hosted, la version du serveur MySQL est inférieure à 5.5 .3
Les jeux de caractères utf8mb4
ont été ajoutés à MySQL 5.5.3.
utf8mb4
a été ajouté à cause d'un bogue dans le jeu de caractèresutf8
de MySQL. Le traitement par MySQL du jeu de caractères utf8 n'autorise qu'un maximum de 3 octets pour un seul point de code, ce qui n'est pas suffisant pour représenter l'intégralité de Unicode (Maximum codepoint =0x10FFFF
). Parce qu'ils ne voulaient pas potentiellement casser quelque chose qui reposait sur ce comportement douteux,utf8mb4
a été ajouté. Documentation ici .
De SO réponse :
Vérification : pour vérifier, vous pouvez vérifier le jeu de caractères actuel et le classement de la base de données à partir de laquelle vous importez le dump - Comment puis-je voir quel jeu de caractères est une base de données/table/colonne MySQL ?
Solution 1 : il suffit de mettre à jour votre serveur MySQL vers la version 5.5.3 (au moins) - pour la prochaine fois, soyez conscient de la version que vous utilisez localement, pour l'étape et pour prod, tout doit être identique. Une suggestion - actuellement, le jeu de caractères par défaut devrait être utf8mb4.
Solution 2 (non recommandé): convertissez le jeu de caractères actuel en utf8, puis exportez les données - le chargement sera correct.
Ouvrez votre fichier mysql avec n'importe quel outil d'édition
trouver
/ *! 40101 FIXER LES NOMS utf8mb4 * /;
changement
/ *! 40101 SET NOMS utf8 * /;
Enregistrez et téléchargez votre mysql.
Comme certains l'ont suggéré ici, remplacer utf8mb4
par utf8
vous aidera à résoudre le problème. IMHO, j'ai utilisé sed
pour les trouver et les remplacer afin d'éviter de perdre des données. De plus, ouvrir un fichier volumineux dans n’importe quel éditeur graphique est potentiellement pénible. Mes données MySQL grandissent de 2 Go. Le commandement ultime est
sed 's/utf8mb4_unicode_520_ci/utf8_unicode_ci/g' original-mysql-data.sql > updated-mysql-data.sql
sed 's/utf8mb4/utf8/g' original-mysql-data.sql > updated-mysql-data.sql
Terminé!
peut-être que toute la base de données + les tables + les champs devraient avoir le même jeu de caractères ??!
c'est à dire.
CREATE TABLE `politicas` (
`ID` int(11) NOT NULL AUTO_INCREMENT,
`Nombre` varchar(250) CHARACTER SET utf8 NOT NULL,
-------------------------------------^here!!!!!!!!!!!
PRIMARY KEY (`ID`)
) ENGINE=MyISAM AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;
-------------------------------------------------^here!!!!!!!!!