【发布时间】:2018-08-03 20:17:26
【问题描述】:
我正在使用基本的 libname 和数据步骤从 SQL 表中将数据读入 SAS。但是,某些“特殊字符”(在本例中为破折号)被读取为带有问号的黑色菱形:�
我知道这是由编码问题引起的 - SQL 列的数据类型为 varchar,SAS 无法正确读取(请详细说明为什么会发生这种情况)。我知道的一个解决方案是将列更改为输入nvarchar;但是,我不拥有数据库,因此无法更改。
我尝试了各种与编码、inencoding 和 outencoding 相关的选项(在 libname 和 data 步骤中),但无法获得正确的组合,如果有的话。
我目前的解决方法是创建一个使用CAST 转换数据类型的视图,并将视图读入 SAS。但是,我确信必须有一个编码解决方案 - 有人知道吗?
【问题讨论】:
-
您的 SAS 会话使用什么编码?你告诉它使用什么编码来连接到 SQL Server?
-
请注意,数据库中的字符不是 ASCII 代码破折号。它可能是一些用于 en-dash 或 em-dash 符号的 Unicode 字符串。
-
“varchar 数据类型,处理 ASCII 字符”:不,varchar 处理来自关联排序规则的字符——不太可能是 ASCII。您用于查询数据库的代码在将字节转换为 Unicode 时应该使用该代码。
-
This link 告诉我这将是 ASCII(第 3 个答案),并且是 Google 为我提出的第一件事,但在谷歌搜索后我可以看到它是不正确的。 .. SQL 中的排序规则是“Latin1_General_CI_AS”,SAS 会话编码使用 UTF-8。连接到 SQL 的 libname 没有指定编码,我不确定如何检查 - 这很可能是我的问题。
标签: sql-server character-encoding sas ssms