csv SSIS:代码页返回到65001

jum4pzuy  于 2023-04-03  发布在  其他
关注(0)|答案(7)|浏览(140)

在我正在编写的SSIS包中,我有一个CSV文件作为源。在连接管理器的“常规”页上,它有65001作为代码页(我正在测试一些东西)。Unicode没有检查。
这些列Map到包含varchar(以及其他)列的SQL Server目标表。
在目的地有一个错误:无法处理列“columnname”,因为为其指定了多个代码页(65001和1252)。
我的SQL列必须是varchar,而不是nvarchar,因为其他应用程序使用它。
在连接管理器的常规页面上,我将代码页更改为1252 (ANSI - Latin I)并OK out,但当我再次打开它时,它又回到了65001
需要注意的是,所有这些都是在CSV文件和SQL表添加和删除列(用户,你知道的)之后发生的。在此之前,我没有遇到任何问题。是的,我在高级编辑器中刷新了OLE DB目标。
这是SQL Server 2012以及随附的BIDS和SSIS版本。

2ic8powd

2ic8powd1#

如果要转换为CSV文件列文本流[DT_TEXT]到SQL varchar(max)数据类型,请将平面文件“连接管理器编辑器”属性“代码页”更改为1252(ANSI - Latin I)。

3pvhb19x

3pvhb19x2#

65001 Code page = Unicode(UTF-8)
基于此Microsoft article (Flat File Connection Manager)

代码页

指定非Unicode文本的代码页。
还有
可以通过以下方式配置平面文件连接管理器:
指定要使用的文件、区域设置和代码页。区域设置用于解释区域设置敏感的数据,如日期**,代码页用于将字符串数据转换为Unicode。**
因此,当平面文件具有Unicode编码时:

则此属性无法更改,它将始终返回到其原始编码。
有关代码页标识符的更多信息,您可以参考这篇文章:

gijlo24d

gijlo24d3#

我在SSIS中通过派生列转换解决了这个问题

gopyfrb3

gopyfrb34#

如果它是csv文件,您仍然可以使用代码页1252来处理它。当您打开平面文件连接管理器时,它会显示该文件的代码页,但您不需要保存该设置。如果您要在连接管理器中进行其他更改,在保存更改之前,请将代码页更改回1252。2如果文件中没有unicode字符,它将处理得很好。

wvmv3b1j

wvmv3b1j5#

如果遇到此问题,请确保将平面文件连接管理器中列的DataType设置为Unicode string [DT_WSTR]而不是string [DT_STR]
然后,您可以使用数据转换任务转换为代码页为1252DT_STR,它将保留设置。

wsxa1bj1

wsxa1bj16#

我遇到了一个类似的挑战,这就是我在这个页面上寻找解决方案的原因。我使用不同的方法解决了它。我在Notepad++中打开csv。其中一个菜单选项称为Encoding。如果您选择该选项,它将为您提供“Convert to ANSI”选项。我知道我的文件不包含任何Unicode特定字符。当我回到SSIS包时,我编辑了平面文件连接,它自动将其更改为1252。

wko9yo5t

wko9yo5t7#

在我的例子中,文件是在Excel中生成的,并且(错误地)保存为CSV UTF-8(逗号分隔)(.csv)而不是简单的CSV(逗号分隔)(.csv)。一旦我将文件保存为正确的CSV格式,代码页就不再更改为1252(ANSI - Latin I)。

相关问题