2012-10-13 3 views
26

मैं आर से एक MySQL डेटाबेस में यूटीएफ -8 पाठ लाने की कोशिश कर रहा हूं। मैं ओएस एक्स पर आर चला रहा हूं (जीयूआई और कमांड लाइन के माध्यम से दोनों की कोशिश की), जहां डिफ़ॉल्ट लोकेल en_US.UTF-8 है, और कोई फर्क नहीं पड़ता कि मैं क्या कोशिश करता हूं, क्वेरी परिणाम दिखाता है "?" सभी गैर-ASCII वर्णों के लिए।आर रिटर्न में MySQL से यूटीएफ -8 पाठ प्राप्त करना "????"

मैं जब ODBC के माध्यम से जोड़ने, परिणामों को लाते समय, साथ ही कोई लाभ नहीं हुआ तो उनमें से प्रत्येक, सभी की 'UTF8' संस्करण के बाद Encoding(res$str) <- 'UTF-8' की स्थापना options(encoding='UTF-8'), DBMSencoding='UTF-8' स्थापित करने की कोशिश की है। कमांड लाइन mysql क्लाइंट से क्वेरी चलाना परिणाम को सही तरीके से दिखाता है।

मैं पूरी तरह से स्टंप हूं। कोई विचार यह क्यों काम नहीं कर रहा है, या अन्य चीजों को मुझे कोशिश करनी चाहिए?

यहाँ एक काफी कम से कम परीक्षण का मामला है:

$ 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) 

दोनों RODBC और RMySQL शो का उपयोग कर अनुसंधान में टेबल का पता कर रहा "?????" str स्तंभ के लिए:

> 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 

उत्तर

26

@chooban के लिए धन्यवाद मुझे पता चला कि कनेक्शन सत्र utf8 के बजाय latin1 का उपयोग कर रहा था। यहां दो समाधान दिए गए हैं:

  • RMySQL के लिए, कनेक्शन वर्ण सेट बदलने के लिए क्वेरी SET NAMES utf8 चलाने के बाद कनेक्ट करें।
  • आरओडीबीसी के लिए, DSN स्ट्रिंग में CharSet=utf8 का उपयोग करके कनेक्ट करें। मैं ओडीबीसी के माध्यम से SET NAMES चलाने में सक्षम नहीं था।

This question मुझे सही दिशा में इंगित किया।

5

यहाँ कम से कम कोशिश करने के लिए कुछ न कुछ है:

> 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 ????? 

पूर्णता के लिए, यहाँ मेरी sessionInfo है। कनेक्ट होने के बाद, "वॉरिएबल दिखाएं" वर्ण_सेट_% '' चलाएं और परिणाम प्रिंट करें। यदि कुछ और नहीं है तो यह देखने के लिए एक उपयोगी जांच है कि आपके द्वारा निर्दिष्ट वर्ण सेट विकल्प क्या हैं।

+0

अच्छी कॉल। निश्चित रूप से पर्याप्त सभी प्रासंगिक चरित्र सेट चर "लैटिन 1" दिखाते हैं। एक समाधान का पता लगाया मैं अलग से पोस्ट करूंगा। –

0

यह मेरे लिए काम किया। यहां एक पूर्ण उदाहरण दिया गया है:

con = dbConnect(drv = MySQL(), user = user, password = password, 
       dbname = dbname, host=host) 

dbSendQuery(con, "SET NAMES utf8mb4;") 
dbSendQuery(con, "SET CHARACTER SET utf8mb4;") 
dbSendQuery(con, "SET character_set_connection=utf8mb4;") 


dbGetQuery(con, "SELECT * FROM WHATEVER") 
संबंधित मुद्दे