我遇到了代码页 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 字符,要检查数据是否正确导入,请将结果 View 更改为 结果到文本
.
GoTo Tools >> Options >> Query Results >> Results To Text
在我提供的第二个引用链接中,他们提到:
If you use SSMS for your queries, change to output type from "Grid" to "Text", because depending on the font the grid can't show 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
选项尝试以下查询。
引用文献
关于sql-server - 即使使用 Unicode 源和目标 (SSIS),字符也会显示不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54591298/