Импорт текста в MySQL: странный формат - PullRequest
0 голосов
/ 03 февраля 2010

Я импортирую некоторые данные из файла .txt в таблицу базы данных MySQL, используя mysqlimport.Кажется, что он импортирует «ОК» (без сообщений об ошибках), но при отображении выглядит очень странно и не может быть найден должным образом.

Вот подробности.Исходный текстовый файл сохраняется в UTF-8 с записями, которые выглядят (в текстовом редакторе) следующим образом.Второе поле содержит разрывы строк:

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

Таблица базы данных, в которую я импортирую, очень проста:

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

Когда я импортирую файл, вот команда, которую я использую:

$ 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

Вот что я вижу, если я тогда попрошу MySQL отобразить записи:

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)

Итак, похоже, что пробелы или некоторые странные дополнения кодирования добавляются вtext.

А вот проблема с запросом к базе данных:

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

ничего не возвращает;и не добавляет пробелы:

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

Только эта команда возвращает что-либо

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

Кто-нибудь может догадаться, что может произойти?Я чувствую, что это должно быть проблема с кодировкой, но я не могу ее решить.

------ ОБНОВЛЕНИЕ --------

ОК, яя проверил базу данных и кодировку соединения.

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)

И show table status говорит, что таблица latin1_swedish_ci.

Я заново сохранил текстовый файл в "Western (Windows Latin 1) "(используя TextEdit на Snow Leopard) и попытался импортировать его, используя ту же команду, что и выше.Однако у меня все еще есть та же проблема кодирования.

Я также попытался, опять же без удачи:

  • создание новой таблицы с UTF-8 и импорт существующего файла
  • копирование и вставка текста в другойтекстовый файл, который я ранее импортировал нормально, и пытается импортировать его.

Все еще полностью сбит с толку: ((((

1 Ответ

0 голосов
/ 03 февраля 2010

Как отмечено в вашем дублирующем вопросе, убедитесь, что ваша таблица и соединение используют UTF-8. Это один из распространенных источников этой проблемы.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...