sql-server - 即使使用 Unicode 源和目标 (SSIS),字符也会显示不正确

标签 sql-server unicode ssis character-encoding etl

我遇到了代码页 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 字符)

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

引用文献

关于sql-server - 即使使用 Unicode 源和目标 (SSIS),字符也会显示不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54591298/

相关文章:

python - 为什么Python print 会打印一些表情符号而不打印其他表情符号?

date - 带有日期变量的 SSIS For 循环容器

c# - 插入行的返回值

java - 列名中的正斜杠引发语法错误 "/"

sql-server - SQL Server 中的只读锁

sql - 当我执行 UPDATE 时出现 INSERT 错误?

unicode - 我怎样才能标准化日语,以便我可以对 Lua 中的禁用词进行单词检查?

python - 使用 Python 2.x unicodecsv 时出现 UnicodeDecodeError

sql-server - 如何将具有两个标题的混合记录类型固定宽度文件加载到两个单独的文件中

ssis - 如何通过DBAmp使用SSIS?