Mysql не может импортировать CSV-файлы - PullRequest
0 голосов
/ 29 июня 2018

Я хочу уточнить, что я просматриваю похожие вопросы о кодировке файлов и импорте файлов CSV в Mysql. Ничто из этого не помогло мне.

Ситуация такая:

Я отвечал за задачу создания приложения с загрузочной пружиной, которое генерирует CSV-файлы, заполненные случайными данными, для заполнения базы данных (каждый CSV-файл соответствует таблице в БД).

первый сценарий состоял в том, чтобы импортировать эти CSV-файлы в Oracle 12c. Проблем не было, я сделал это, в данных не было ошибок.

Фактическая проблема заключается в использовании тех же файлов .csv для импорта их в Mysql, это невозможно.

Уточняющие обе базы данных (Oracle и Mysql) имеют одинаковые таблицы с эквивалентными типами данных

Я пытался:

  • ЗАГРУЗИТЬ В ФАЙЛ , но запрос никогда не завершается (никогда не отображается сообщение об ошибке).
  • Экспорт данных из Oracle (из SQLDeveloper) в файл .csv и затем их импорт в Mysql. Я получил ту же ошибку ниже.

  • Мастер импорта таблиц данных из Mysql-workbench и выдает:

Не удается проанализировать файл, попробуйте изменить тип кодировки, если это не помогает, возможно, файл не является: csv или файл пуст.

Далее:

Необработанное исключение: кодек 'ascii' не может кодировать символ u '\ xcd' в позиции 8: порядковый номер не в диапазоне (128).

Я просмотрел вопросы о кодировке, но ни один из них не подходит для моего случая. И я почти уверен, что я установил кодировку UTF-8 в моем приложении для весенней загрузки. У моего файлового писателя это есть:

writer = new OutputStreamWriter(fileOutputStream, StandardCharsets.UTF_8);

Как это возможно, что сгенерированные файлы .csv отлично работают в Oracle, но не в Mysql?

Дополнительная информация:

  • springboot 2.0.3.RELEASE

  • Java версия 1.8.0_162

1 Ответ

0 голосов
/ 30 июня 2018

Если вы работаете в среде Java. Я думаю, что решение DBIS может работать лучше для вас. В этом решении вам нужно только сопоставить столбцы файла CSV (имя заголовка или индекс) с именем столбца таблицы базы данных в файле XML. никакой другой код не требуется. https://stackoverflow.com/a/50180272/2480620

Добавить один скрипт для экспорта таблицы в CSV и следующий CSV в таблицу.

<?xml version="1.0" encoding="UTF-8"?>
<config>
  <connections>
      <jdbc name="mysql">
          <driver>com.mysql.jdbc.Driver</driver>
          <url>jdbc:mysql://localhost:3306/test1</url>
          <user>root</user>
          <password></password>
      </jdbc>
      <jdbc name="oracle">
          <driver>oracle.jdbc.OracleDriver</driver>
          <url>jdbc:oracle:thin:@localhost:1521:orcl</url>
          <user>root</user>
          <password></password>
      </jdbc>
  </connections>
  <component-flow>
      <execute name="oracle2csv" success="csv2mysql" enabled="true">
          <migrate>
              <source>
                <table connection="oracle">locations</table>
              </source>
              <destination>
                <file delimiter="," header="false" path="D:/test_source.csv"/>
              </destination>
              <mapping>
                  <column source="location" destination="1" />
              </mapping>
          </migrate>
      </execute>
      <execute name="csv2mysql" enabled="true">
          <migrate>
              <source>
                  <file delimiter="," header="false" path="D:/test_source.csv"/>
              </source>
              <destination>
                  <table connection="mysql">locations</table>
              </destination>
              <mapping>
                  <column source="1" destination="location" />
              </mapping>
          </migrate>
      </execute>
  </component-flow>
</config>

полное решение объяснено https://dbisweb.wordpress.com/

Я использовал его на MySql, Oracle и Postgres.

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