使用Unicode源和目标(SSIS)时出现错误的字符

wil*_*yth 5 sql-server unicode ssis etl character-encoding

我有一个代码页unicode/non unicode问题,需要专业知识来理解它.

在SSIS中,我正在从UTF8编码的文本文件中读取数据.数据类型都是DT_WSTR(unicode字符串).目的地是NVARCHAR,也是unicode.

非标准字符(如Ú未正确编码)显示为黑盒问号).

如果字符在输入文件中正确显示,则源设置为DT_WSTR且目标为nvarchar,为什么字符无法正确呈现?

我已经尝试将源列的代码页设置为65001,但在SSIS中,它只能更改STR(非unicode)类型的代码页.

我非常感谢您理解为什么所有unicode字段仍然无法正确存储unicode值.

OP评论更新

似乎我的输出是好的,如果我端对端使用Unicode类型(输入是DT_WSTR,目标列是nvarchar&当再次提取到文本,输出列是DW_WSTR.唯一的问题是sql server management studio,它似乎不是在将输出设置为网格或文本时,能够在查询结果中正确呈现unicode字符.这是一个红色的鲱鱼,如果忽略这个过程整个过程没有问题

Had*_*adi 4

试图找出问题所在

\n\n

将unicode字符从平面文件导入到SQL Server目标没有问题,您唯一要做的就是将平面文件编码设置为unicode,并且结果列必须是NVARCHAR. 根据您的问题,看来您已经满足了要求,所以我可以说:

\n\n

Unicode 字符已成功导入到 SQL Server,但由于某些原因 SQL Server Management Studio 无法在网格结果中显示 Unicode 字符,要检查数据是否正确导入,请将结果视图更改为Result To Text

\n\n
GoTo Tools >> Options >> Query Results >> Results To Text\n
Run Code Online (Sandbox Code Playgroud)\n\n

在我提供的第二个参考链接中,他们提到:

\n\n
\n

如果您使用 SSMS 进行查询,请将输出类型从“网格”更改为“文本”,因为根据字体,网格无法显示 unicode。

\n
\n\n

或者您可以尝试更改网格结果字体,(在我的机器上,我使用 Tahoma 字体,它正常显示 unicode 字符)

\n\n

在此输入图像描述

\n\n

实验

\n\n

您可以执行以下测试(取自下面的链接)

\n\n
SET NOCOUNT ON;\n\n\n\nCREATE TABLE #test\n\n  (  id int IDENTITY(1, 2) NOT NULL Primary KEY\n\n    ,Uni nvarchar(20) NULL);\n\nINSERT INTO #test (Uni) VALUES (N\'DE: \xc3\xa4\xc3\xb6\xc3\xbc\xc3\x9f\xc3\x96\xc3\x9c\xc3\x84\');\n\nINSERT INTO #test (Uni) VALUES (N\'PL: \xc5\x9b\xc4\x87\xc5\xba\xc5\x82\xc4\x99\');\n\nINSERT INTO #test (Uni) VALUES (N\'JAP: \xe8\xa8\x80\xe3\x82\x82\xe8\xa8\x80\xe3\x82\x8f\xe3\x81\x9a\xe3\x81\xab\');\n\nINSERT INTO #test (Uni) VALUES (N\'CHN: \xe7\x8e\x89\xe7\x8e\x8b\xe7\x93\x9c\xe7\x93\xa6\xe7\x94\x98\xe7\x94\x9f\xe7\x94\xa8\xe7\x94\xb0\xe7\x94\xb1\xe7\x96\x8b\');\n\n\n\n\nSELECT * FROM #test;\n\n\nGO\n\nDROP TABLE #test;\n
Run Code Online (Sandbox Code Playgroud)\n\n

Result as Grid使用和选项尝试以下查询Result as Text

\n\n

参考

\n\n\n