即使使用Unicode源和目标(SSIS),字符也会出现错误显示

时间:2019-02-08 11:18:36

标签: sql-server unicode ssis character-encoding etl

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

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

standard等非标准字符未正确编码)(显示为黑匣子问号)。

如果字符正确显示在输入文件中,则将源设置为DT_WSTR,而将目标设置为nvarchar,为什么不能正确显示字符?

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

Id会帮助您理解为什么所有unicode字段仍无法正确存储unicode值。

根据OP注释进行更新

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

1 个答案:

答案 0 :(得分:4)

试图找出问题所在

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

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

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

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

  

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

或者您可以尝试更改Grid Results字体,(在我的机器上,我使用Tahoma字体,它通常显示Unicode字符)

enter image description here

实验

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

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选项尝试以下查询。

参考