如何在RODBC中为MySQL设置字符集?

我有一个带有汉字的数据作为字段名称和数据,我已经从xls导入它们以访问2007,并将它们导出到ODBC.然后,我使用RODBC在R中读取它们,字段名称可以,但是对于数据,所有的中文字符都显示为?.

我已经读过RODBC manual,它说:

如果可以将DBMS或ODBC驱动程序设置为以R会话的字符集进行通信,则应这样做.例如,MySQL可以通过SQL设置通讯字符集,例如设置名称“ utf8”.

我想这是问题所在,但是如何通过RODBC将此命令提供给MySQL?谢谢!

解决方法:

我不熟悉ODBC和RODBC,但是我对上面的文档摘要的阅读是,SET NAMES’utf8′;是MySQL SQL dialect的一部分,因此您可以像从数据库中检索数据那样使用其他任何SQL语句来运行它.

类似于(未经测试)的内容:

sqlQuery(myChannel, query = "SET NAMES 'utf8';")

其中myChannel是odbcConnect()返回的连接句柄.

您是否有理由在RMySQL软件包上使用RODBC?我在使用RMySQL进行广泛的数据处理以及从R内部检索复杂的数据集方面拥有丰富的经验.

更新:
some evidence至少在某一点上已在MySQL ODBC驱动程序中停用了SET NAMES.如果您确信可以通过直接访问数据库(通过mysql或MySQL的GUI前端之一)读取字符,则可以尝试复制SET NAMES所做的事情.以下是来自MySQL manual的信息:

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;

您可以尝试执行这三个SQL语句来代替SET NAMES,看看是否可行.

同一手册还记录了SET CHARACTER SET,可以与SET NAMES相同的方式使用:

SET CHARACTER SET charset_name

SET CHARACTER SET与SET NAMES类似,但将character_set_connection和collat​​ion_connection设置为character_set_database和collat​​ion_database. SET CHARACTER SET x语句等效于以下三个语句:

SET character_set_client = x;
SET character_set_results = x;
SET collation_connection = @@collation_database;

设置collat​​ion_connection还会将character_set_connection设置为与归类相关联的字符集(等同于执行SET character_set_connection = @@ character_set_database).不必显式设置character_set_connection.

您可以尝试使用SET CHARACTER SET’utf8’代替.

最后,您正在运行什么字符集/语言环境?看来您在Windows上-这是UTF8语言环境吗?我还注意到您的Q中有些混乱.您说您已将数据导入到MS Access,然后将其导出到ODBC.您是说将其导出到MySQL吗?虽然ODBC是一个连接驱动程序,但允许与一系列数据库进行通信,但不允许您“导出到”某些数据库.

您真的在MySQL中使用数据吗?您不能通过RODBC连接到MS Access来从那里读取数据吗?

如果数据在MySQL中,请尝试使用RMySQL包连接到数据库并读取数据.

上一篇:32,并在同一时间都64位JDBC在Java


下一篇:来自C#的ODBC和DB2存储过程:找不到例程