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é: (((
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
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