【问题标题】:How do you import UTF-8 flat files into SQL Server 2008 R2?如何将 UTF-8 平面文件导入 SQL Server 2008 R2?
【发布时间】:2013-09-15 22:53:28
【问题描述】:

我有一堆 UTF-8 编码的平面文件需要导入 SQL Server 2008 R2 数据库。批量插入无法识别直径,似乎也无法接受 UTF-8。

我知道有很多关于 SQL Server 2008 如何处理 UTF-8 编码的文章,但我正在寻找任何更新的答案,因为这些文章大部分都是旧的。

我可以做些什么来将这些平面文件放入数据库中,方法是在插入之前转换它们还是在插入期间运行一个进程?

我不想手动转换每一个。此外,我尝试创建的 SSIS 包可以读取和分离数据。它只是无法移动看起来的数据。 :(

平面文件由 Java 生成。将 java 环境从 UTF-8 转换为任何其他编码均不成功。

注意

我无意存储 UTF-8 数据。我的分隔符很时髦,因为它是 UTF-8。分隔列和行时,SQL Server 无法读取字符。就是这样。

【问题讨论】:

  • 您是否尝试使用 CodePage = 65001(UTF-8) 的 SSMS“导入数据”功能?

标签: sql-server unicode utf-8


【解决方案1】:

不正确,您只需选择代码页 65001

【讨论】:

  • 确保在编辑映射时选择 NVARCHAR。
【解决方案2】:
  1. 将您的数据文件转换为 UTF-16 Little Endian(即 Little Endian)
  2. 使用带有 -w 选项的 bcp。

【讨论】:

    【解决方案3】:

    仅供参考,如果有人谷歌它,并像我一样落在这里。


    我已经尝试了十几次接受的答案,但没有成功。在我的例子中,我的数据文件是一个.csv 平面文件,其中有很多重音字符/字母,例如ç é ã á

    我还注意到,无论我选择什么编码,导入都是使用 1251 (ANSI - Latin 1) 编码进行的。

    因此,解决方案是在导入之前转换,我的.csv 文件从 UTF-8 转换为完全相同的 1251(ANSI - 拉丁语 1)编码。我使用 Notepad++ 进行了转换。

    转换后,进行常规导入(通过 SSMS 任务 ->“导入数据”向导),选择 1251(ANSI - 拉丁语 1)编码,一切都正确导入。


    环境:

    SQL Server 网络 2016

    SQL Server Management Studio v17.9.1

    记事本++ v7.7.1


    另外,这也回答了原始 OP 的问题:

    我可以做些什么来将这些平面文件放入数据库中,方法是在插入之前转换它们还是在插入期间运行一个进程?

    【讨论】:

      【解决方案4】:

      因为起初它不起作用,所以我想补充 Arthur 的答案,正如 live-love 在 cmets 中提到的那样: 您应该将字符串数据类型更改为 NVARCHAR。 您可以通过从“高级”选项卡和指定的列中选择 Unicode 字符串 (DT_WSTR) 来做到这一点。

      【讨论】:

        【解决方案5】:

        Microsoft 在编码方面一直很糟糕,尤其是在 SQL Server 中。 Here 是您的解决方案。

        【讨论】:

        • 是否有一种解决方案可以同时对所有文件执行此操作?也许某些东西与 SQL Server 无关?我对存储 UTF-8 字符没有兴趣。只是我的分隔符是 UTF-8,因此它不能分隔列或行。
        • 分隔符怎么可能是字符编码?也许我错过了一些东西。我已经在我提到的答案的 cmets 中列出了您可以使用 iconv 或直接用 Java 编写 UTF-16 文件,只需将编码提供给您的 PrintWriter
        • 我尝试在 Java 中设置环境以使用 UTF-8 以外的其他方式编写,同时传递环境设置并在 Maven 中定义它。我什至在 Windows(这是我用于 Java 的环境)中设置了环境变量,以将相同的环境设置传递给 Java。都失败了。至于 Unix,如果 iconv 限制为 *inx,我无法访问 Linux 或 Unix 环境进行转换。
        • 昨晚我确实做了一个 SSIS 包,我将源文件设置为 UTF-8。包可以读取数据,但分隔符是垃圾。所以我将分隔符定义为 SQL 处理的垃圾字符。它将列分开,所有其他数据(我正在导入的数据)都是干净的。我使用 SSIS 包将其直接导入数据库,没有任何问题。如果我尝试使用 SSIS 将数据从 UTF-8 转换为其他任何内容,则会出错。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-07-11
        • 1970-01-01
        • 2015-10-03
        • 2013-12-21
        • 1970-01-01
        • 2016-07-11
        • 2023-03-04
        相关资源
        最近更新 更多