我有一个代码页unicode / non unicode问题,需要专业知识来理解它。
在SSIS中,我正在从UTF8编码的文本文件中读取数据。数据类型都是DT_WSTR(unicode字符串)。目的地是NVARCHAR,也是unicode。
非标准字符(如Ú未正确编码)显示为黑盒问号)。
如果字符在输入文件中正确显示,则源设置为DT_WSTR且目标为nvarchar,为什么字符无法正确呈现?
我已经尝试将源列的代码页设置为65001,但在SSIS中,它只能更改STR(非unicode)类型的代码页。
我非常感谢您理解为什么所有unicode字段仍然无法正确存储unicode值。
似乎我的输出是好的,如果我端对端使用Unicode类型(输入是DT_WSTR,目标列是nvarchar&当再次提取到文本,输出列是DW_WSTR。唯一的问题是sql server management studio,它似乎不是在将输出设置为网格或文本时,能够在查询结果中正确呈现unicode字符。这是一个红色的鲱鱼,如果忽略这个过程整个过程没有问题
将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字符)
您可以执行以下测试(取自以下链接)
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
选项尝试以下查询。