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