mysqlimport issues "set @@character set database=binaire" qui empêche le chargement des valeurs json

j'utilise mysqlimport sans problème depuis longtemps, maintenant que mysql 5.7 a ajouté le support de type de données json, j'essaie d'utiliser mysqlimport avec des lignes contenant des données json.

voici un exemple d'une ligne dans un fichier csv qui sera importé en utilisant mysqlimport:

column_A_value,column_B_value,[{"x":20,"y":"some name"}]

notez que le dernier type de colonne est json. Maintenant, lorsque vous utilisez mysqlimport comme suit:

mysqlimport -u user -ppass -h localhost --columns='col_A,col_B,col_C' --local --fields-terminated-by=',' some_db /path/to/products.txt

j'ai eu l'erreur suivante: Cannot create a JSON value from a string with CHARACTER SET 'binary'., when using table: products

cependant en utilisant le LOAD DATA IN FILE généré au lieu de mysqlimport a fonctionné sans problèmes! J'ai ouvert mysql log et vérifié les données de charge générées dans la commande FILE lors de l'exécution de mysqlimport, puis je les ai copiées et collées, et ça a fonctionné sans problème! J'ai couru quelque chose comme:

LOAD DATA LOCAL INFILE '/path/to/products.txt'
INTO TABLE products

et ça a marché! La seule différence est que dans le log, lors de l'exécution mysqlimport cette ligne a été générée aussi

Query   /*!40101 set @@character_set_database=binary */

puis Charger les données dans la commande FILE a été généré, de sorte que cette ligne est la source du problème.

donc j'ai essayé de définir le jeu de caractères à utf8,

mysqlimport -u user -ppass -h localhost --columns='col_A,col_B,col_C' --local --fields-terminated-by=',' --default-character-set=utf8 some_db /path/to/products.txt

mais en vain, la même erreur s'est produite.

alors un indice pour résoudre ce problème de jeu de caractères s'il vous plaît ?

5
demandé sur Loai Ghoraba 2016-03-23 15:32:43

1 réponses

Vérifiez la configuration de votre jeu de caractères:

montrent des variables comme ' % char%';

ne pas répondre à --default-character-set pourrait encore être un bug de mysqlimport: https://bugs.mysql.com/bug.php?id=29712

Solutions Possibles:

  1. Essayer SET NAMES utf8; avant l'importation
  2. essayez d'utiliser mysql avec --default-character-set=utf8 au lieu de mysqlimport
  3. modifier votre my.cnf :
[mysqld]
init-connect='SET NAMES utf8'
character-set-server=utf8
collation-server=utf8_general_ci
default-character-set=utf8

[client]
default-character-set=utf8
0
répondu Mel_T 2016-03-29 13:50:59