在我写的SSIS包中,我有一个CSV文件作为源。在Connection Manager General页面上,它有65001
作为Code页面(我正在测试一些东西)。不检查Unicode。
列映射到具有varchar
(以及其他)列的SQL Server目标表。
目的地有错误:列"列名"无法处理,因为为其指定了多个代码页(65001和1252)。
我的SQL列必须是varchar
,而不是nvarchar
,因为其他应用程序使用它。
在“连接管理器常规”页面上,我将“代码”页面更改为1252 (ANSI - Latin I)
,然后单击“确定”,但是当我再次打开它时,它会返回65001
。如果(仅用于测试)我检查Unicode与否,它没有什么区别。
作为一个注释,所有这一切都发生在CSV文件和SQL表添加和删除列之后(用户,你知道。)在此之前,我没有任何问题。是的,我在高级编辑器中刷新了OLE DB目标。
这是SQL Server 2012及其随附的BIDS和SSIS版本。
答案 0 :(得分:5)
65001代码页= Unicode(UTF-8)
基于此Microsoft article (Flat File Connection Manager):
代码页
指定非Unicode文本的代码页。
另外
您可以通过以下方式配置平面文件连接管理器:
指定要使用的文件,区域设置和代码页。语言环境用于解释区域设置敏感数据,例如日期,,代码页用于将字符串数据转换为Unicode。
因此,当平面文件具有Unicode编码时:
然后此属性无法更改,它将始终返回原始编码。
有关代码页标识符的更多信息,请参阅以下文章:
答案 1 :(得分:0)
如果它是要转换为SQL varchar(max)数据类型的CSV文件列文本流[DT_TEXT],则将平面文件Connection Manager编辑器属性的“代码”页更改为1252(ANSI-Latin I)。 / p>
答案 2 :(得分:0)
如果它是一个csv文件,您仍然可以使用代码页1252对其进行处理。当您打开平面文件连接管理器时,它会显示文件的代码页,但是您无需保存该设置。如果要在连接管理器中进行其他更改,请在保存更改之前将代码页更改回1252。如果文件中没有Unicode字符,它将正常处理。
答案 3 :(得分:0)
我通过派生列转换在SSIS中解决了这个问题
答案 4 :(得分:0)
我遇到了类似的挑战,这就是我最终在此页面上寻找解决方案的方式。我使用不同的方法解决了它。 我在 Notepad++ 中打开了 csv。菜单选项之一称为编码。如果您选择它,它将为您提供“转换为 ANSI”的选项。 我知道我的文件不包含任何 Unicode 特定字符。 当我回到 SSIS 包时,我编辑了平面文件连接,它自动将其更改为 1252。