在处理 R 脚本中的损坏管道时,我发现了 SQL Server 2016 的一种奇怪行为。请参阅下面的 T-SQL 代码:
DECLARE
@r nvarchar(100)
/* Create a data frame with a broken pipe as one of its fields and a simple ASCII encoded string in another. */
SET @r = N'
df <- data.frame(
a = "¦",
b = "a,b,c"
)';
/* Print @r to detect the inclusion of any unwanted characters. */
PRINT @r;
/* Execute and retrieve the output. */
EXECUTE sp_execute_external_script
@language = N'R',
@script = @r,
@output_data_1_name = N'df'
WITH RESULT SETS ((
BadEncodingColumn varchar(2),
GoodEncodingColumn varchar(5)
));
PRINT 命令在 Messages 选项卡中返回:
df <- data.frame(
a = "¦",
b = "a,b,c"
)
但是,最终的结果选项卡如下所示:
BadEncodingColumn GoodEncodingColumn
¦ a,b,c
这种行为似乎出现在脚本的 EXECUTE sp_execute_external_script 阶段,在处理 Excel、R 和其他版本的 SQL Server 的其他编码问题时,我已经看到了这个字符 (Â)。
这种行为的任何解决方案?还有加分,这个角色有什么“特别”之处?
编辑:我尝试修改 SQL Server 和 R 中的数据类型,但无济于事。