2015-06-19 10 views
5

एक MySQL डेटाबेस में, एक तालिका utf8 में एन्कोड किया गया है, लेकिन किसी कारण से कनेक्शन लैटिन 1 में है।utf8 में dplyr :: tbl कनेक्शन एन्कोडिंग कैसे बदलें?

res <- RMySQL::dbSendQuery(con,"show variables like 'character_set_%'") 
dbFetch(res) 
      Variable_name      Value 
1  character_set_client      latin1 
2 character_set_connection      latin1 
3 character_set_database     utf8mb4 
4 character_set_filesystem      binary 
5 character_set_results      latin1 
6  character_set_server      latin1 
7  character_set_system      utf8 
8  character_sets_dir /usr/share/mysql/charsets/ 

This page explain how to set the connection's character set to utf8 using RMySQL

RMySQL::dbGetQuery(con,"show variables like 'character_set_%'") 
RMySQL::dbGetQuery(con,"set names utf8") 

लेकिन मैं वास्तव में dplyr::tbl उपयोग करने के लिए डेटाबेस क्वेरी करने के लिए पसंद करते हैं। चूंकि dplyr::src_mysql द्वारा बनाए गए कनेक्शन में केवल एसक्यूएल स्टेटमेंट भेजने की संभावना है जो टेबल बनाते हैं। Utf8 एन्कोडिंग का उपयोग करने के लिए कनेक्शन सेटिंग सेट करने का एक आसान तरीका क्या है?

+0

क्या आपने इसे देखा है? http://stackoverflow.com/questions/25934752/utf-8-encoding-with-dplyr-and-sqlite –

+0

@ रोमन लूस्ट्रिक मैंने इसे धन्यवाद दिया है, मैं चरित्र कॉलम को utf8 में ' iconv() 'लेकिन यह एक हैक है और मैं सीधे utf8 में चरित्र वैक्टर पढ़ना चाहूंगा। विशेष रूप से क्योंकि डेटाबेस पहले से ही utf8 में है। –

+0

मुझे तुम्हारा दर्द महसूस होता है। एन्कोडिंग गैर-लैटिन 1 डेटा वाले सभी के लिए एक झुकाव है। –

उत्तर

1

संपादित सर्वर विकल्प फ़ाइल (एक डेबियन सिस्टम पर /etc/mysql/my.cnf में स्थित) और जोड़ने के निम्नलिखित विकल्पों:

collation-server = utf8_unicode_ci 
character-set-server = utf8 
skip-character-set-client-handshake 

mysql सर्वर विन्यास फाइल भी mysql- साथ संपादित किया जा सकता कार्यक्षेत्र।

इस परिवर्तन के बाद, dplyr::tbl यूटीएफ -8 में एन्कोड किए गए चरित्र वेक्टर को लाता है।

2

मैं एक ही समस्या है, जो मैं के रूप में हल में भाग इस प्रकार है:

foo_db <- src_mysql(host='0.0.0.0',user='dbuser',password='a_password', 
        dbname='FlightTimes',port=3336) 
dbGetQuery(foo_db$con,'SET NAMES utf8') 

मैंने पाया यह, str(foo_db) के माध्यम से foo_db की संरचना को देख देखकर संभव हो गया था वहाँ था वर्ग MySQLConnection के con विशेषता है, तो अपना dbGetQuery मंत्र लागू करना।

संबंधित मुद्दे