2010-02-02 7 views
0

j'importer des données à partir d'un fichier txt dans une table de base de données MySQL, en utilisant mysqlimport. Il semble importer OK (pas de message d'erreur), mais semble très étrange lors de l'affichage, et ne peut être recherché comme prévu.Importation de texte à MySQL: le format étrange

Voici les détails. Le fichier texte est enregistré en UTF-8, avec des enregistrements qui ont l'air (dans un éditeur de texte) comme celui-ci. Le deuxième champ comprend les sauts de ligne:

WAR-16,52 ~~~~~ Lorem ipsum dolor sit. 
Lorem ipsum dolor sit. 
~~~~~ ENDOFRECORD 
WAR-16,53~~~~~Lorem ipsum dolor sit. 
Lorem ipsum dolor sit. 
Lorem ipsum dolor sit. 
Lorem ipsum dolor sit. 

~~~~~ ENDOFRECORD 

La table de base de données dans laquelle je l'importation est très simple:

+-------+---------------+------+-----+---------+-------+ 
| Field | Type   | Null | Key | Default | Extra | 
+-------+---------------+------+-----+---------+-------+ 
| id | varchar(100) | YES |  | NULL |  | 
| text | varchar(5000) | YES |  | NULL |  | 
+-------+---------------+------+-----+---------+-------+ 
2 rows in set (0.00 sec) 

Quand j'importer le fichier, voici la commande que j'utilise:

$ mysqlimport -u root db textfile.txt --fields-terminated-by="~~~~~" --lines-terminated-by="ENDOFTHELINE" --default-character-set='utf8' 
db.records_list: Records: 18778 Deleted: 0 Skipped: 0 Warnings: 18787 

Voici ce que je vois si je demande à MySQL d'afficher les enregistrements:

mysql> select * from textfile; 
| 
W A R - 1 6 , 5 2 | L o r e m i p s u m d o l o r s i t . 
L o r e m i p s u m d o l o r s i t . 
(etc) 

Ainsi, il semble que les espaces, ou quelques extras d'encodage étranges, sont ajoutés au texte.

Et voici le problème avec la requête de base de données:

mysql> select * from textfile where id like "%WAR%"; 

retours rien; ni ne l'ajout d'espaces:

mysql> select * from textfile where id like "%W A R%"; 

Seule cette commande retourne quelque chose

mysql> select * from textfile where id like "%W%"; 

Quelqu'un peut-il deviner ce qui pourrait se produire? J'ai l'impression que ce doit être un problème d'encodage, mais je ne peux pas le résoudre.

------ -------- MISE À JOUR

OK, je l'ai vérifié la base de données et le codage de connexion.

mysql> show variables like "character_set_%"; 
+--------------------------+----------------------------------------+ 
| Variable_name   | Value         | 
+--------------------------+----------------------------------------+ 
| character_set_client  | latin1         | 
| character_set_connection | latin1         | 
| character_set_database | latin1         | 
| character_set_filesystem | binary         | 
| character_set_results | latin1         | 
| character_set_server  | latin1         | 
| character_set_system  | utf8         | 
| character_sets_dir  | /usr/local/mysql/share/mysql/charsets/ | 
+--------------------------+----------------------------------------+ 
8 rows in set (0.01 sec) 

Et show table status dit la table est latin1_swedish_ci.

Je réenregistrés le fichier texte dans « l'Ouest (Windows Latin 1) » (en utilisant TextEdit sur Snow Leopard) et a essayé de l'importer en utilisant la même commande que ci-dessus. Cependant j'ai toujours le même problème d'encodage.

J'ai aussi essayé, encore une fois sans succès:

  • création d'une nouvelle table avec UTF-8 et d'importer le fichier existant
  • copier & coller le texte dans un autre fichier texte que je l'ai déjà importé bien, et en essayant d'importer cela.

encore totalement déconcerté: (((

Répondre

0

Comme il est indiqué dans votre question en double, assurez-vous que votre table et la connexion sont à la fois en UTF-8 qui est l'une des sources communes de cette question..

http://dev.mysql.com/doc/refman/5.0/en/charset-unicode.html

+0

Merci. Je l'ai vérifié et mis à jour ci-dessus, mais pas de chance pour l'instant ... Y at-il quelque chose d'évident que je suis toujours manquant? – AP257

+0

Si l'ensemble de codage de caractères est défini correctement, la seule autre suggestion consiste à s'assurer que le terminal dans lequel vous travaillez est également UTF-8 (si vous copiez/collez les instructions). Sinon, désolé, je n'ai pas d'autres suggestions. – macabail