我遇到一个代码页unicode / non unicode问题,需要专业知识来理解它。
在SSIS中,我正在从UTF8编码的文本文件中读取数据。数据类型均为DT_WSTR(unicode字符串)。目的地是NVARCHAR,它也是Unicode。
standard等非标准字符未正确编码)(显示为黑匣子问号)。
如果字符正确显示在输入文件中,则将源设置为DT_WSTR,而将目标设置为nvarchar,为什么不能正确显示字符?
我尝试将源列的代码页设置为65001,但是在SSIS中,只能在STR(非unicode)类型上更改代码页。
Id会帮助您理解为什么所有unicode字段仍无法正确存储unicode值。
如果我使用从头到尾的Unicode类型(输入是DT_WSTR,目标列是nvarchar,并且再次提取到文本时,输出列是DW_WSTR,我的输出就可以了。唯一的问题是sql server management studio,这不是将输出设置为网格或文本时,似乎能够在查询结果中正确呈现unicode字符。这是一个红色的鲱鱼,如果忽略该过程,整个过程将没有问题
答案 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字符)
您可以执行以下测试(来自下面的链接)
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 Grid
和Result as Text
选项尝试以下查询。