Sono bloccato cercando di recuperare testo UTF-8 in un database MySQL da R. Sto eseguendo R su OS X (provato sia tramite la GUI che dalla riga di comando), dove la locale predefinita è en_US.UTF-8, e indipendentemente da ciò che provo, il risultato della query mostra "?" per tutti i caratteri non ASCII.Il recupero del testo UTF-8 da MySQL in R restituisce "????"
Ho provato a installare options(encoding='UTF-8')
, DBMSencoding='UTF-8'
quando si collegano tramite ODBC, impostazione Encoding(res$str) <- 'UTF-8'
dopo il recupero dei risultati, così come le varianti 'utf8' di ciascuno di questi, tutto inutile. L'esecuzione della query dal client mysql della riga di comando mostra correttamente i risultati.
Sono totalmente perplesso. Qualche idea sul perché non funziona o su altre cose che dovrei provare?
Ecco un test piuttosto limitata:
$ mysql -u root
mysql> CREATE DATABASE test;
mysql> USE test;
mysql> CREATE TABLE test (str VARCHAR(10)) ENGINE=InnoDB DEFAULT CHARSET=utf8;
Query OK, 0 rows affected (0.02 sec)
mysql> INSERT INTO test (str) VALUES ('こんにちは');
Query OK, 1 row affected (0.00 sec)
mysql> select * from test;
+-----------------+
| str |
+-----------------+
| こんにちは |
+-----------------+
1 row in set (0.00 sec)
Interrogazione tabella R utilizzando entrambi gli spettacoli RODBC e RMySQL "?????" per la colonna str:
> con <- odbcDriverConnect('DRIVER=mysql;user=root', DBMSencoding='UTF-8')
> sqlQuery(con, 'SELECT * FROM rtest.test')
str
1 ?????
> library(RMySQL)
Loading required package: DBI
> con <- dbConnect(MySQL(), user='root')
> dbGetQuery(con, 'SELECT * FROM rtest.test')
str
1 ?????
Per completezza, ecco la mia sessionInfo:
> sessionInfo()
R version 2.15.1 (2012-06-22)
Platform: x86_64-apple-darwin9.8.0/x86_64 (64-bit)
locale:
[1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8
attached base packages:
[1] stats graphics grDevices utils datasets methods base
other attached packages:
[1] RMySQL_0.9-3 DBI_0.2-5 RODBC_1.3-6
Buona chiamata. Abbastanza sicuro tutte le variabili rilevanti di set di caratteri mostrano "latin1". Ho capito una soluzione che posterò separatamente. –