2017-10-04 14 views
1

Je n'arrive pas à changer le "locale" lorsque j'utilise le paquet DBI dans R. Plus spécifiquement, ma base de données contient des caractères tels que "é, è, ê, ..." et DBI ne les lit pas correctement.Comment modifier les paramètres régionaux de connexion à la base de données?

Lorsque j'effectue la même requête à l'aide du package RODBC, le résultat est correct. Ma question: comment puis-je obtenir le résultat correct (c'est-à-dire lire "é, è, ê, ..." correctement) avec le paquet DBI?

Cela devrait être un exemple reproductible:

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) 

Dans le cas où cela est pertinent, voici mon numéro de session:

> 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

Avez-vous regardé ceci: https://stackoverflow.com/questions/38363566/trouble-with-utf-8-characters-what- Je ne vois pas ce que je stocke? –

+1

Cela semble indiquer que je dois changer la façon dont les données sont stockées dans la base de données. Mais j'utilise une base de données à l'échelle de l'entreprise qui n'est pas sous mon contrôle. J'ai donc besoin d'une solution qui le répare (en utilisant le paquet DBI) de mon côté. Cela devrait être possible puisque le paquetage RODBC fait exactement cela. – Willem

+0

Jetez un oeil à http://mysql.rjweb.org/doc.php/charcoll#diagnosing_charset_issues pour savoir comment transmettre un jeu de caractères hexadécimal. Peut-être que ça va marcher? –

Répondre

0

Avez-vous essayé d'utiliser l'argument de codage dans la fonction dbConnect? Ce devrait être l'encodage de texte utilisé sur la base de données. "Si la base de données est la même que votre codage local défini sur" ", consultez iconvlist() pour une liste complète des encodages disponibles sur votre système.Les chaînes de notes sont toujours codées en UTF-8."

Vous pouvez essayer:

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

HTH James