【问题标题】:Determine What Unicode Characters SSIS Won't Handle确定 SSIS 不会处理的 Unicode 字符
【发布时间】:2011-12-07 02:32:08
【问题描述】:

我正在使用一个 SSIS 包,它从 SQL Server 获取数据并创建文本文件以发送给供应商。目前正在使用 ANSI 1252 对文件进行编码,并且未在平面文件连接管理器上选中 Unicode 复选框。

遇到此符号时包失败:♥

这让我相信,如果该步骤试图写出任何非 ascii 字符,它将失败。但是,它将成功处理:“ş”,方法是将其转换为标准“s”。就我们的目的而言,这种行为很好,如果它做了类似于心形符号的事情,就不会有问题。我试图避免发送 Unicode 文件,因为该文件已经非常大,将其大小翻倍并不可取。

我正在寻找的是 SSIS 不会自动为我转换的 unicode 字符范围。然后我需要做的是替换原始 SQL 语句,以清除那些像♥这样的字符。

我们从 REPLACE(NAME, SUBSTRING(NAME, PATINDEX('%[^ -ÿ]%', NAME COLLATE Latin1_General_BIN2), 1), '') 开始,但这会将“ş”替换为空格,我们试图避免这种情况,因为 SSIS 可以很好地处理“ş”。

感谢您阅读此问题!

【问题讨论】:

  • 你在做什么将数据类型更改为 ANSI?据我所知,SSIS 不进行隐式转换。您是否在数据库数据源和文件数据源之间转换数据类型?
  • 我有一个 OLE DB 源查询包含我正在使用的 nvarchar 列的表。我没有使用任何数据转换任务,它实际上是一个直接的 OLE DB 到平面文件的转换。
  • 数据流看起来像一个查询,一些操作,然后写入一个平面文件。源数据在 sql server 中是 unicode,它以 wstr (?) 的形式进入管道 您是在数据流中显式转换为 str (1252),还是在写入文件时让该转换隐式发生?
  • 数据作为 DT_WSTR 进入平面文件目标,我没有进行任何显式转换。也许一种方法是尝试使用 DataConversion 任务对其进行转换,并将失败的记录发送到单独的 Unicode 文件...
  • 一开始我可能会这样处理这个问题。然后,您可以在遇到不同的错误条件时添加对它们的处理。我很惊讶所有行都没有因为数据类型不匹配而失败。

标签: sql sql-server unicode ssis ascii


【解决方案1】:

您将获得 Windows 的“最合适的后备”编码。它转换的确切字符没有正式记录,并且行为因语言环境而异。许多替换在许多情况下是不合适的,甚至可能存在安全问题。几乎总是最好避免。 Background

我试图避免发送 Unicode 文件,因为该文件已经非常大,将其大小翻倍并不可取。

UTF-16LE(微软工具称之为“Unicode”)可能是 ASCII 的两倍,但为什么不是另一个 UTF,最明显的是 UTF-8?

【讨论】:

  • 我错误地认为将其标记为“Unicode”是使用 UTF-8 而不是 UTF-16LE,感谢您提供的出色信息。
  • 是的,不幸的是,在 Windows 世界中广泛使用“Unicode”来表示 UTF-16LE 具有高度误导性。
猜你喜欢
  • 2018-12-05
  • 1970-01-01
  • 2017-09-16
  • 1970-01-01
  • 2011-02-22
  • 2011-06-19
  • 1970-01-01
  • 1970-01-01
  • 2011-11-20
相关资源
最近更新 更多