62 votes

L'importation MySQL 5.7.12 ne peut pas créer une valeur JSON à partir d'une chaîne avec CHARACTER SET 'binary'

J'ai exporté ma base de données JSON colonnes en elle. Après j'ai migré vers un nouveau serveur, mon importation s'est écrasé à chaque fois avec une erreur de ce type:

impossible de créer une valeur JSON à partir d'une chaîne avec le JEU de CARACTÈRES 'binaire'

Sur stackoverflow, j'ai trouvé ce post, mais n'a pas fonctionné pour moi: mysqlimport questions "set @@character_set_database=binaire" qui empêche le chargement de valeurs json

Le fichier est de 2 go et qu'il n'est pas possible d'ouvrir le fichier.

Quelqu'un a une idée à importer mon fichier de base de données?

148voto

Lorcan O'Neill Points 508

Vous pouvez appliquer une expression régulière au texte SQL que vous avez exporté, qui convertira vos chaînes binaires en un format insérable. Ce fut ma solution rapide et sale lorsque j'ai rencontré ce problème

 (X'[^,\)]*')
CONVERT($1 using utf8mb4)
 

Appliquer cette expression rationnelle signifie

 INSERT INTO json_table (json_column) VALUES (X'7B22666F6F223A2022626172227D');
 

deviendra maintenant

 INSERT INTO json_table (json_column) VALUES (CONVERT(X'7B22666F6F223A2022626172227D' using utf8mb4));
 

104voto

Henry Points 117

J'ai eu ce problème avec les exportations effectuées par Sequel Pro. J'ai décoché l'option Output BLOB fields as hex et le problème a disparu. L'inspection visuelle de l'exportation a montré JSON lisible au lieu de binaire.

9voto

Lnr Points 41

Cela a fonctionné pour moi (j'avais également le contrôle de l'exportation vers le fichier sql). Il y a beaucoup de mises en garde; par exemple, je savais que les champs ne dépasseraient jamais 1000 et ne contiendraient aucun caractère non ascii. S'il vous plaît, commentez et dites-moi tous les pourquoi c'est si mauvais tho :)

Avant l'exportation

 alter table <table> modify <json_column> varchar(1000);
 

Puis après l'importation

 alter table <table> modify <json_column> json;
 

0voto

Swarup Bam Points 21

changer le classement en utf8_general_ci. travaillé pour moi.

-5voto

David Stokes Points 124

Toutes les informations de type de données MySQL JSON doivent être un jeu de caractères UTF8MB4 et non BINARY.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X