2010-02-05 10 views
0

J'ai une base de données mySQL qui a des ensembles de classement et de caractère comme suit:classement de la base MySQL et jeu de caractères

mysql> show variables like "character_set_database"; 
+------------------------+-------+ 
| Variable_name   | Value | 
+------------------------+-------+ 
| character_set_database | utf8 | 
+------------------------+-------+ 
1 row in set (0.00 sec) 

mysql> show variables like "collation_database"; 
+--------------------+-----------------+ 
| Variable_name  | Value   | 
+--------------------+-----------------+ 
| collation_database | utf8_unicode_ci | 
+--------------------+-----------------+ 
1 row in set (0.00 sec) 

J'ai une table des pays, qui se compose d'un, id et nom. Lorsque je tente d'importer ce pays (comme par exemple avec des caractères « étrangers »)

São Tomé and Príncipe 

I get the following error: 

    Unable to execute INSERT statement. [wrapped: SQLSTATE[HY000]: General error: 
1366 Incorrect string value: '\xE3\xA3o To...' for column 'name' at row 1] 

J'ai importé ces données dans le passé - Est-ce que quelqu'un a une idée pourquoi je ne peux pas importer ces données (comme les appareils de YML)? . Je l'ai importé avec succès dans le passé. Je ne rememeber pas ce qui a changé depuis si

+0

Juste une supposition: avez-vous modifié le fichier en attendant? L'encodage est-il encore UTF-8? –

+0

Oui, le codage de fichier est toujours UTF-8, c'est la première chose que j'ai vérifié. –

Répondre

2
\xE3\xA3o To... 

Eh bien, ce n'est pas une séquence d'octets valide. ã en UTF-8 devrait être \xC3\xA3. On dirait que quelqu'un a chargé les données d'importation comme ISO-8859-1 et les a casse en minuscules, en transformant l'octet C3 en E3. Naturellement, les résultats ne sont plus UTF-8.

Aurait besoin de plus de détails sur le processus d'importation pour en dire plus.

+0

Bob: les données sont en train d'être importées en tant que fichier d'appareils (au format YML) par la tâche Symfony (v1.31) 'symfony propel: data-load. Comme je l'ai mentionné plus tôt, le fichier a été sauvegardé au format UTF-8. Je développe sur la plate-forme de Windows. HTH. –

+0

Bob: existe-t-il de toute façon pour consigner les requêtes envoyées à mysql pendant l'importation? - (vous ne connaissez pas le framework Symfony et la tâche d'import de données) –

+0

Oui, je ne connais pas Symfony, mais http://www.symfony-project.org/book/1_2/16-Application-Management- Les outils estiment que le fichier '..._ dev.log' devrait consigner les requêtes? Je ne peux pas voir immédiatement un document pour le processus de chargement de données qui dit quoi que ce soit à propos de minuscules, mais * quelque chose * doit le faire. Comme une autre pensée, est-ce que votre connexion elle-même utilise UTF-8? AIUI vous devriez avoir 'encoding: utf8' dans votre' databases.yml'. – bobince

0

Mettez <?php header('Content-Type: text/plain; charset=utf-8'); ?> en haut de votre fichier fixtures.yml.

0

Je n'utiliserais pas fixtures.yml pour télécharger des données complexes comme celle-ci. J'ai une situation/configuration très similaire à celle de vous et j'utilise LOAD DATA INFILE de MySQL sans aucun problème.

LOAD DATA INFILE 'C:/development/cities.csv' INTO TABLE project.city CHARACTER SET utf8 
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' 
LINES TERMINATED BY '\r'; 

... où le fichier cities.csv est une exportation UTF-8 d'OpenOffice Calc.

Questions connexes