MySQL无法导入CSV文件

时间:2018-06-29 15:26:58

标签: mysql csv spring-boot

我想澄清一下,我浏览了有关文件编码和将csv文件导入Mysql的类似问题。这些都不对我有用。

情况是这样的:

我负责创建一个Spring Boot应用程序,该应用程序生成填充有随机数据的csv文件以填充数据库(每个csv文件对应于数据库中的一个表)。

第一种情况是将这些.csv文件导入Oracle 12c。没问题,我做到了,数据没有错误。

实际的问题是使用相同的.csv文件将其导入Mysql,这是不可能的。

澄清两个数据库(Oracle和Mysql)都具有相同的表并具有相同的数据类型

我尝试过:

  • 载入文件选项,但查询从未完成(它从未显示任何错误消息)。
  • 将Oracle中的数据(从SQLDeveloper)导出到.csv文件,然后将其导入Mysql中,我在下面遇到了相同的错误。

  • Mysql-workbench中的数据表导入向导,它说:

  

无法分析文件,请尝试更改编码类型,如果这样做没有帮助,可能文件不是:csv,或者文件为空。

其次:

  

未处理的异常:'ascii'编解码器无法在位置8编码字符u'\ xcd':序数不在范围(128)中。

我浏览了有关编码的问题,但没有一个适合我的情况。而且我很确定我在Spring Boot应用程序中将编码设置为UTF-8。 我的文件编写器拥有它:

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

生成的.csv文件如何在Oracle中完美运行而在Mysql中无法正常运行?

其他信息:

  • springboot 2.0.3.RELEASE

  • Java版本1.8.0_162

1 个答案:

答案 0 :(得分:0)

如果您正在使用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上使用它。