2017-10-04 18 views
1

RでDBIパッケージを使用するときに "ロケール"を変更する際に問題があります。具体的には、データベースに "é、è、ê、..."などの文字が含まれていて、DBIが正しく読み込まない。データベース接続ロケールを変更するにはどうすればよいですか?

RODBCパッケージを使用して同じクエリを実行すると、正しい結果が得られます。私の質問:DBIパッケージを使用して正しい結果(つまり「é、è、ê、...」を正しく読み取る)を得るにはどうすればよいですか?

これは、再現性の例のようになります。これは関連性がある場合には

sql <- "select * from myDatabase.dbo.myTable" 
# Where myTable contains any of the difficult characters 

# Try with DBI 
library(odbc) 
library(DBI) 

conDBI <- dbConnect(
    odbc::odbc(), 
    dsn = "myDsn", 
    UID = myLogin, 
    PWD = myPassword, 
    Port = 1433 
) 

table_DBI <- dbGetQuery(conDBI, sql) 

# Try with RODBC 
library(RODBC) 

conRODBC <- odbcConnect(
    "myDsn", 
    uid = myLogin, 
    pwd = myPassword 
) 

table_RODBC <- sqlQuery(conRODBC, sql) 

、ここに私のセッション情報です:

> sessionInfo() 
R version 3.4.0 Patched (2017-06-02 r72765) 
Platform: x86_64-w64-mingw32/x64 (64-bit) 
Running under: Windows 7 x64 (build 7601) Service Pack 1 

Matrix products: default 

locale: 
[1] LC_COLLATE=Dutch_Belgium.1252 LC_CTYPE=Dutch_Belgium.1252 LC_MONETARY=Dutch_Belgium.1252 LC_NUMERIC=C     
[5] LC_TIME=Dutch_Belgium.1252  

attached base packages: 
[1] stats  graphics grDevices utils  datasets tools  methods base  

other attached packages: 
[1] RODBC_1.3-15 DBI_0.6-1 odbc_1.1.1 

loaded via a namespace (and not attached): 
[1] bit_1.1-12  compiler_3.4.0 hms_0.3  tibble_1.3.3 Rcpp_0.12.11 bit64_0.9-7 blob_1.1.0  rlang_0.1.1 
+0

あなたはこの見てきました:https://stackoverflow.com/questions/38363566/trouble-with-utf-8-characters-what-私は見ていない - 何 - 私は - 保存されていますか? –

+1

これは、データがデータベースに格納される方法を変更する必要があることを示しているようです。しかし私は私のコントロール下にない全社規模のデータベースを使用しています。だから私は私の側で(DBIパッケージを使用して)それを修正するだけの解決策が必要です。これは、RODBCパッケージがまさにそれを行うので可能であるはずです。 – Willem

+0

16進文字セットを渡す方法については、http://mysql.rjweb.org/doc.php/charcoll#diagnosing_charset_issuesを参照してください。多分それはうまくいくでしょうか? –

答えて

0

あなたがするDBConnect機能にencoding引数を使用してみましたか?これは、データベースで使用されるテキストエンコーディングである必要があります。 "あなたのシステムで利用可能なエンコーディングの完全なリストについてはiconvlist()を参照してください。文字列は常にUTF-8でエンコードされて返されます。

あなたが試してみてください:

conDBI <- dbConnect( 
odbc::odbc(), 
dsn = "myDsn", 
UID = myLogin, 
PWD = myPassword, 
Port = 1433, 
encoding = "latin1") 

HTHジェームズ

関連する問題