我遇到了代码页 unicode/非 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 字符。这是一个转移注意力的事情,如果忽略这一点,整个过程不会出现问题
试图找出问题所在
将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
and Result as Text
选项。
参考
- SQL Server 2012 在结果中不显示 unicode 字符 https://stackoverflow.com/questions/39881779/sql-server-2012-not-showing-unicode-character-in-results
- sql server 2008 不显示和插入 unicode 字符! https://social.msdn.microsoft.com/Forums/sqlserver/en-US/b8b52b86-7dc9-4e59-9a54-9b826ca8e710/sql-server-2008-not-showing-and-inserting-unicode-characters?forum=sqldatabaseengine
- 使用 SQL Server 集成服务导入 UTF-8 Unicode 特殊字符 https://www.mssqltips.com/sqlservertip/3119/import-utf8-unicode-special-characters-with-sql-server-integration-services/
- Microsoft SQL Server Management Studio - 文本形式的查询结果 https://stackoverflow.com/questions/20012552/microsoft-sql-server-management-studio-query-result-as-text
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)