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

问题描述 投票:5回答:1

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

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

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

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

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

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

Update from the OP comments

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

sql-server unicode ssis character-encoding etl
1个回答
4
投票

Trying to figure out the issue

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

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

GoTo Tools >> Options >> Query Results >> Results To Text

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

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

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

enter image description here

Experiments

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

SET NOCOUNT ON;



CREATE TABLE #test

  (  id int IDENTITY(1, 2) NOT NULL Primary KEY

    ,Uni nvarchar(20) NULL);

INSERT INTO #test (Uni) VALUES (N'DE: äöüßÖÜÄ');

INSERT INTO #test (Uni) VALUES (N'PL: śćźłę');

INSERT INTO #test (Uni) VALUES (N'JAP: 言も言わずに');

INSERT INTO #test (Uni) VALUES (N'CHN: 玉王瓜瓦甘生用田由疋');




SELECT * FROM #test;


GO

DROP TABLE #test;

使用Result as GridResult as Text选项尝试以下查询。

References

© www.soinside.com 2019 - 2024. All rights reserved.