我想澄清一下,我浏览了有关文件编码和将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
答案 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上使用它。