【问题标题】:Inserting files into DB将文件插入数据库
【发布时间】:2012-04-03 13:37:01
【问题描述】:

我有 csv 文件、java 应用程序和数据库,我从我的 java 应用程序中读取 csv 文件并 经过一些操作,我将文件一个一个地插入到数据库中,但是像ŠĐŽĆČ这样的字符没有正确插入。我将数据库设置为 utf-8 默认排序规则。通过测试,我意识到,当我使用 ANSI 编码设置文件时,一切正常(ŠĐŽĆČ 已正确插入数据库),但是当编码为 UTF-8 时,字符未正确插入。问题是我必须插入数据库的文件必须以 UTF-8 编码。 你能帮我解决这个问题吗?

【问题讨论】:

    标签: utf-8


    【解决方案1】:

    如果没有更多细节,很难具体说明,但有几件事会浮现在脑海中:

    1) 如果我理解正确,您是说您的 CSV 格式为 UTF8?你验证过这个假设是正确的吗?在相关说明中,鉴于您认为它是 UTF-8,您如何将该文件加载到 Java 中?

    注意,Java 的文件阅读器使用系统的默认字符编码。不一定是UTF-8,可以检查是否打印System.getProperty("file.encoding");

    我倾向于不依赖这个,而是按照如下已知的编码进行加载:

    FileInputStream fis = new FileInputStream("myfile.txt"); 
    BufferedReader reader = new BufferedReader(new InputStreamReader(fis, "UTF-8"));
    ...
    

    2) 数据库排序规则不同于指定字符集。 (请注意,如果您还提到了您的数据库客户端,那将会很方便)。排序与文本的排序/排序有关。您通常需要指定字符集。如何完成这在很大程度上取决于您的数据库。

    【讨论】:

    • 1.我的 CSV-s 在 UTF-8 中,我以标准方式加载文件:文件 f = new File("C:\\..."),而不是在 while 循环中我处理每一行。之后,我在 MySql DB(JDBC 驱动程序)中插入文件。 2. 我在dev.mysql.com/doc/refman/5.0/en/charset-database.html 上读到:“如果在没有 CHARACTER SET 的情况下指定了 COLLATE Y,则使用与 Y 和排序规则 Y 关联的字符集”,所以如果我设置 UTF-8 默认排序规则,那么字符集将是 UTF -8.
    • File 对象不是阅读器,但这是我渴望发现的。我已经更新了我的答案,以展示它是如何为 utf-8 完成的。
    猜你喜欢
    • 1970-01-01
    • 2014-01-12
    • 2011-07-11
    • 2021-03-15
    • 1970-01-01
    • 1970-01-01
    • 2013-10-29
    • 2013-03-07
    • 2018-12-31
    相关资源
    最近更新 更多