SQL Server 2016 中的 R 脚本损坏了 Â 字符
R scripts in SQL Server 2016 corrupted with  character
我发现 SQL Server 2016 在处理 R 脚本中损坏的管道时有一个奇怪的行为。请参阅下面的 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 命令returns:
df <- data.frame(
a = "¦",
b = "a,b,c"
)
但是,最终的“结果”选项卡如下所示:
BadEncodingColumn GoodEncodingColumn
¦ a,b,c
这种行为似乎出现在脚本的 EXECUTE sp_execute_external_script 阶段,我在处理 Excel、R 和其他版本的其他编码问题时看到了这个字符 (Â) SQL服务器。
对这种行为有什么解决办法吗?还有奖励积分,关于 Â 字符的 'special' 是什么?
编辑:我曾尝试修改 SQL Server 和 R 中的数据类型,但无济于事。
问题似乎与 R 脚本中的非 ASCII 字符编码有关(损坏的管道在 128 个 ASCII 字符之外)。您可以使用“编码”函数将编码显式覆盖为 Unicode(UTF-8) 以解决此问题。例如你的脚本可以更新如下
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"
)
Encoding(levels(df$a)) <- "UTF-8" ###### Encoding override'
/* 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)
));
产生以下结果
BadEncodingColumn GoodEncodingColumn
¦ a,b,c
我发现 SQL Server 2016 在处理 R 脚本中损坏的管道时有一个奇怪的行为。请参阅下面的 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 命令returns:
df <- data.frame(
a = "¦",
b = "a,b,c"
)
但是,最终的“结果”选项卡如下所示:
BadEncodingColumn GoodEncodingColumn
¦ a,b,c
这种行为似乎出现在脚本的 EXECUTE sp_execute_external_script 阶段,我在处理 Excel、R 和其他版本的其他编码问题时看到了这个字符 (Â) SQL服务器。
对这种行为有什么解决办法吗?还有奖励积分,关于 Â 字符的 'special' 是什么?
编辑:我曾尝试修改 SQL Server 和 R 中的数据类型,但无济于事。
问题似乎与 R 脚本中的非 ASCII 字符编码有关(损坏的管道在 128 个 ASCII 字符之外)。您可以使用“编码”函数将编码显式覆盖为 Unicode(UTF-8) 以解决此问题。例如你的脚本可以更新如下
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"
)
Encoding(levels(df$a)) <- "UTF-8" ###### Encoding override'
/* 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)
));
产生以下结果
BadEncodingColumn GoodEncodingColumn
¦ a,b,c