Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Como definir charset para MySQL no RODBC?


Não estou familiarizado com ODBC e RODBC , mas minha leitura do trecho de documentação acima é que SET NAMES 'utf8'; faz parte do dialeto SQL do MySQL , então você executa isso como faria com qualquer outra instrução SQL que possa usar para recuperar dados de seu banco de dados.

Algo como (não testado):
sqlQuery(myChannel, query = "SET NAMES 'utf8';")

onde myChannel é o identificador de conexão retornado por odbcConnect() .

Existe uma razão pela qual você está usando o RODBC sobre o pacote RMySQL? Eu tive uma boa experiência usando RMySQL para processamento extensivo de dados e recuperação de conjuntos complexos de dados, tudo dentro do R.

Atualização:algum evidência que, pelo menos em um ponto, que SET NAMES foi desativado no driver ODBC do MySQL. Se você estiver confiante de que pode ler os caracteres via acesso direto ao banco de dados (via mysql ou um dos front-ends GUI do MySQL), então você pode tentar replicar o que SET NAMES faz. O seguinte é do manual MySQL :
A SET NAMES 'x' statement is equivalent to these three statements:

SET character_set_client = x;
SET character_set_results = x;
SET character_set_connection = x;

Você pode tentar executar essas três instruções SQL no lugar de SET NAMES e veja se isso funciona.

O mesmo manual também documenta SET CHARACTER SET , que pode ser usado da mesma forma que SET NAMES :

SET CHARACTER SET charset_name

SET CHARACTER SET é semelhante a SET NAMES mas define character_set_connection e collation_connection para character_set_database e collation_database . A SET CHARACTER SET x declaração é equivalente a estas três declarações:
SET character_set_client = x;
SET character_set_results = x;
SET collation_connection = @@collation_database;

Configurando collation_connection também define character_set_connection ao conjunto de caracteres associado ao agrupamento (equivalente a executar SET character_set_connection = @@character_set_database ). Não é necessário definir character_set_connection explicitamente.

Você pode tentar usar SET CHARACTER SET 'utf8' em vez de.

Por fim, em qual conjunto de caracteres / localidade você está executando? Parece que você está no Windows - esta é uma localidade UTF8? Também noto alguma confusão em seu Q. Você diz que importou seus dados para o MS Access e depois os exportou para ODBC. Você quer dizer que você exportou para o MySQL? Eu pensei que o ODBC era um driver de conexão para permitir a comunicação com/entre um intervalo de bancos de dados, não algo que você pudesse "exportar".

Você está dados realmente no MySQL? Você não conseguiu se conectar ao MS Access via RODBC para ler os dados de lá?

Se os dados estiverem no MySQL, tente usar o pacote RMySQL para se conectar ao banco de dados e ler os dados.