2010-01-26 8 views
2

J'essaie d'importer un fichier .csv dans une table. Je l'ai compris comment obtenir les données insérées en utilisant la requête suivante:Utilisation de LOAD DATA INFILE avec des données arabes

LOAD DATA INFILE 'examplesofdata.csv' INTO TABLE coins FIELDS TERMINATED BY ',' 
ENCLOSED BY '' ESCAPED BY '\\' IGNORE 1 LINES; 

Cependant, pour plusieurs de mes champs, j'ai le contenu arabe qui obtient est entré comme une série de? Je suppose que c'est parce que je n'ai pas collationné correctement la base de données ou que je ne comprends pas complètement la requête LOAD DATA INFILE. Tout avis serait grandement apprécié.

Les pièces SHOW CREATE TABLE; sortie est:

CREATE TABLE `coins` (
    `cat_num` int(11) NOT NULL, 
    `reg_num` int(11) NOT NULL, 
    `period` varchar(255) NOT NULL, 
    `arb_period` varchar(255) character set utf8 collate utf8_unicode_ci NOT NULL, 
    `ruler` varchar(255) NOT NULL, 
    `arb_ruler` varchar(255) character set utf8 collate utf8_unicode_ci NOT NULL, 
    `mint` varchar(255) NOT NULL, 
    `arb_mint` varchar(255) character set utf8 collate utf8_unicode_ci NOT NULL, 
    `date` varchar(255) NOT NULL, 
    `weight` float NOT NULL, 
    `diameter` float NOT NULL, 
    `khedieval_num` varchar(255) NOT NULL, 
    `ref` text NOT NULL, 
PRIMARY KEY (`cat_num`) 
) ENGINE=MyISAM DEFAULT CHARSET=utf8 
+0

Affichez les pièces SHOW CREATE TALBE; et des exemples de données n'apparaissent pas. – Yada

Répondre

1

J'ai donc fini par obtenir une réponse d'un ancien instructeur pour ma classe de bases de données. Il m'a dit que ce problème est en fait un bug avec la version actuelle de MySQL et que la seule solution connue à ce moment est d'importer manuellement les données via PHP ou un autre langage de script.

Le bug de ce problème est à l'adresse: http://bugs.mysql.com/bug.php?id=10195

Il ne m'a pas aidé trop puisque je ne travaillais sur un prototype, et géré une solution de contournement dans le temps, mais nous espérons qu'il peut être plus utiliser pour vous.

+0

Ce bogue s'appliquait à la version 4.1, qui n'avait pas la clause 'CHARACTER SET' sur' LOAD DATA'. Mais le rapport de bug fournit une solution de contournement. J'espère que personne qui lit ce fil n'utilise encore le 4.1; donc cela ne devrait pas être considéré comme "la réponse". –

0

Comment sur la configuration CHARACTER SET utf8_unicode ou votre région?

+0

Quand j'essaye: LOAD DATA INFILE 'coinsArab.csv' JEU DE CARACTÈRES utf8_unicode INTO TABLE coins coins TERMINÉS PAR ',' ENCLOS PAR '' ESCAPED BY '\\' IGNORE 1 LINES; Je reçois une erreur disant qu'il y a une erreur dans mon SQL, près de CHARACTER SET ... Est-il au mauvais endroit? – Krustal

+0

imm, pourriez-vous essayer avec 'utf8_unicode_ci'? Je l'ai mentionné pour l'encodage utf8 essentiellement. syntaxe correcte, vous pourriez bien ici - http://dev.mysql.com/doc/refman/5.1/fr/load-data.html – YOU

+0

J'ai compris mon erreur de syntaxe, se sentir assez stupide, mais il en résulte encore ??? ?? ??? au lieu de quoi dans le fichier. Quand je copie le texte de l'Excel et le colle manuellement, cela fonctionne très bien, je ne sais pas si cela aide. – Krustal

2

Ceci est toujours un bug avec MySQL. Cependant, j'ai découvert que le charset par défaut de la base de données est le coupable. Il existe deux solutions de contournement possibles:

  1. Si vous modifiez le jeu de caractères par défaut de votre base de données à LATIN1, cela fonctionnera. Vous pouvez garder vos tables/colonnes UTF-8. Etrangement, si vous utilisez le "CHARACTER SET latin1", il fonctionnera pour les tables/colonnes UTF-8 et Latin1. Avec cette méthode, vous pouvez conserver votre jeu de caractères db/table/column sur UTF-8.
0

J'ai aussi découvert que votre character_set_client doit être UTF-8 ainsi:

mysql> show session variables like 'char%'; 
+--------------------------+----------------------------------------+ 
| Variable_name   | Value         | 
+--------------------------+----------------------------------------+ 
| character_set_client  | latin1       
... 

Lire mysql docs sur la façon de s'y prendre pour que le changement du serveur qui ou tout simplement la session seulement.

4

LOAD DATA LOCAL INFILE 'nomfichier' INTO TABLE tableau nom JEU DE CARACTÈRES utf8 COLONNES TERMINÉES PAR '\ t' LIGNES TERMINÉES PAR '\ n';

le JEU DE CARACTÈRES utf8 fait l'affaire.

0

J'ai également eu ce problème, mais au lieu de la série de?, Je recevais des données tronquées.

Comme "aeióu" était tronqué dans "aei".

Vérifiez la solution que j'ai trouvée avec here, vous devez faire correspondre le jeu de caractères CSV avec le jeu de caractères LOAD DATA INFILE.

Vive

0

Ajout CHARACTER SET utf8 à la déclaration LOAD DATA est la réponse immédiate. Cependant, deux autres problèmes ont été soulevés ...

Lorsque vous essayez d'utiliser UTF8/utf8mb4, si vous voyez Question Marks (les réguliers, pas de diamants noirs),

  • Les octets à stocker ne sont pas codés en UTF8. Répare ça. La colonne de la base de données est CHARACTER SET utf8 (ou utf8mb4). Répare ça.
  • Vérifiez également que la connexion pendant la lecture est utf8.

Lorsque vous essayez d'utiliser UTF8/utf8mb4, si vous voyez texte tronquées,

  • Les octets à stocker ne sont pas codés en UTF8. Répare ça.
  • Vérifiez également que la connexion pendant la lecture est utf8.
Questions connexes