在我正在编写的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版本。
7条答案
按热度按时间2ic8powd1#
如果要转换为CSV文件列文本流[DT_TEXT]到SQL varchar(max)数据类型,请将平面文件“连接管理器编辑器”属性“代码页”更改为1252(ANSI - Latin I)。
3pvhb19x2#
65001 Code page = Unicode(UTF-8)
基于此Microsoft article (Flat File Connection Manager):
代码页
指定非Unicode文本的代码页。
还有
可以通过以下方式配置平面文件连接管理器:
指定要使用的文件、区域设置和代码页。区域设置用于解释区域设置敏感的数据,如日期**,代码页用于将字符串数据转换为Unicode。**
因此,当平面文件具有Unicode编码时:
则此属性无法更改,它将始终返回到其原始编码。
有关代码页标识符的更多信息,您可以参考这篇文章:
gijlo24d3#
我在SSIS中通过派生列转换解决了这个问题
gopyfrb34#
如果它是csv文件,您仍然可以使用代码页1252来处理它。当您打开平面文件连接管理器时,它会显示该文件的代码页,但您不需要保存该设置。如果您要在连接管理器中进行其他更改,在保存更改之前,请将代码页更改回1252。2如果文件中没有unicode字符,它将处理得很好。
wvmv3b1j5#
如果遇到此问题,请确保将平面文件连接管理器中列的DataType设置为
Unicode string [DT_WSTR]
而不是string [DT_STR]
然后,您可以使用数据转换任务转换为代码页为
1252
的DT_STR
,它将保留设置。wsxa1bj16#
我遇到了一个类似的挑战,这就是我在这个页面上寻找解决方案的原因。我使用不同的方法解决了它。我在Notepad++中打开csv。其中一个菜单选项称为Encoding。如果您选择该选项,它将为您提供“Convert to ANSI”选项。我知道我的文件不包含任何Unicode特定字符。当我回到SSIS包时,我编辑了平面文件连接,它自动将其更改为1252。
wko9yo5t7#
在我的例子中,文件是在Excel中生成的,并且(错误地)保存为CSV UTF-8(逗号分隔)(.csv)而不是简单的CSV(逗号分隔)(.csv)。一旦我将文件保存为正确的CSV格式,代码页就不再更改为1252(ANSI - Latin I)。