2016-12-12 12 views
2

Rスクリプト内で破損したパイプを処理すると、SQL Server 2016の異常な動作が検出されました。以下のT-SQLコードを参照してください:SQL Server 2016のRスクリプトがÂ文字で破損しています

df <- data.frame(
    a = "¦", 
    b = "a,b,c" 
    ) 

は、しかし、最終結果]タブには、次のようになります:

BadEncodingColumn GoodEncodingColumn 
¦     a,b,c 

これを[メッセージ]タブで

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コマンドに戻り、これを動作はスクリプトのEXECUTE sp_execute_external_scriptフェーズで出現したようで、Excel、R、および他のバージョンのSQL Serverで他のエンコーディングの問題を処理する場合は、この文字(Â)を見たことがあります。

この現象に対する解決策はありますか?ボーナスポイントは、Âキャラクターの「特別な」ものは何ですか?

編集:私はSQL Server内のデータ型と無駄にRを試してみました。

+0

これがdownvotedれた理由は本当にわからないを作成し、私には有効かつ新規質問のように思えます。 –

答えて

3

RスクリプトでASCII以外の文字をエンコードすると問題が発生するようです(破損したパイプは128個のASCII文字の外にあります)。問題を回避するためにUnicode(UTF-8)に明示的に 'Encoding'関数を使用してエンコードを上書きすることができます。次のようにたとえば、スクリプトを更新することができる

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 
+0

ありがとうございます! –

関連する問題