[問題] RODBC匯入SQL Server中文亂碼問題

看板R_Language作者 (微小的希望)時間8年前 (2017/02/21 14:22), 編輯推噓2(2018)
留言20則, 3人參與, 最新討論串1/1
[問題類型]: 程式諮詢(我想用R 做某件事情,但是我不知道要怎麼用R 寫出來) [軟體熟悉度]: 新手(沒寫過程式,R 是我的第一次) [問題敘述]: 我利用公司電腦(英文版作業系統)爬中文網站 利用Sys.setlocale(locale='cht')已經可以在R上面看到中文 也能正確匯入匯出繁體中文的csv (感溫感溫) 我現在要跑排程將資料直接送入我的SQL Server 不過發現原先在R上面的中文 這次送進SQL Server後又變亂碼啦 這次是長這樣的亂碼 (#無檔案時使用: 他會自己建立varchar的table) aE?°|P¯f?U?|ao?O?I 或是這樣的亂碼 (#更新檔案時使用: 先建好nvarchar的table) Nªº¶W°ª¶¥1 qÄv 再麻煩大家了 謝謝!! [程式範例]: 下方的無檔案時使用跟更新檔案時使用會擇一使用 library(RODBC) odbcconnect <- odbcConnect("MY_DB","trusted_connection=true") values <- paste0( " article[ , c('", paste(colnames(article),collapse="','") ,"')] ", collapse="" ) sqlSave(odbcconnect, article, tablename = "subjectinfo_temp", rownames = F) #無檔案時使用 sqlSave(odbcconnect, article, tablename = "subjectinfo_temp", rownames = F, append = T) #更新檔案時使用 odbcClose(odbcconnect) [環境敘述]: R version 3.3.2 (2016-10-31) Platform: x86_64-w64-mingw32/x64 (64-bit) Running under: Windows Server >= 2012 x64 (build 9200) locale: [1] LC_COLLATE=Chinese (Traditional)_Taiwan.950 LC_CTYPE=Chinese (Traditional)_Taiwan.950 LC_MONETARY=Chinese (Traditional)_Taiwan.950 [4] LC_NUMERIC=C LC_TIME=Chinese (Traditional)_Taiwan.950 attached base packages: [1] stats graphics grDevices utils datasets methods base other attached packages: [1] RODBC_1.3-14 xml2_1.1.1 loaded via a namespace (and not attached): [1] tools_3.3.2 Rcpp_0.12.9 [關鍵字]: RODBC, SQL Server, 亂碼 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 36.224.199.64 ※ 文章網址: https://www.ptt.cc/bbs/R_Language/M.1487658174.A.8C2.html

02/22 08:59, , 1F
odbcConnect參數DBMSencoding設設看
02/22 08:59, 1F

02/22 10:23, , 2F
設過惹 BIG5, UTF-8, WINDOWS-1252, gbk都亂碼Q__Q
02/22 10:23, 2F

02/22 10:47, , 3F
如果用sql server driver? odbcDriverConnect('driver=
02/22 10:47, 3F

02/22 10:48, , 4F
{SQL Server};server=...;...) 我自己這樣用沒遇過亂碼
02/22 10:48, 4F

02/22 12:00, , 5F
請問這時候的server就是我之前odbcconnect取好的那個
02/22 12:00, 5F

02/22 12:01, , 6F
"MY_DB"嗎 他說不存在或access_denied
02/22 12:01, 6F

02/22 12:02, , 7F
odbcDriverConnect('driver={SQL Server};server="MY_D
02/22 12:02, 7F

02/22 12:02, , 8F
B";trusted_connection=true') 我是這樣寫
02/22 12:02, 8F

02/22 13:49, , 9F
我server改成原始的server後成功惹~~ 不過還是亂碼Q__Q
02/22 13:49, 9F

02/22 14:05, , 10F
我在odbcDriverConnect上加DBMSencoding也沒有用 然後
02/22 14:05, 10F

02/22 14:06, , 11F
匯出csv要特別加fileEncoding = 'UTF-8'才會成功
02/22 14:06, 11F

02/22 14:10, , 12F
更正 加了DBMSencoding後會變NULL 不管是是不是driver
02/22 14:10, 12F

02/22 16:18, , 13F
我覺得會不會是sql server設定而不是R連接sql server問題
02/22 16:18, 13F

02/22 16:26, , 14F
我現在也有這感覺XD 我找到答案再更新
02/22 16:26, 14F

02/23 14:38, , 15F
我剛看惹SQL設定 但他跟正常的中文表所有屬性都一樣
02/23 14:38, 15F

02/23 14:39, , 16F
感覺應該是英文作業系統的關係 在R到SQL中間出了問題
02/23 14:39, 16F

02/25 06:52, , 17F
去找系統odbc驅動程式設定看看
02/25 06:52, 17F

02/28 17:36, , 18F
如果是說ODBC資料來源管理員的話 是我設的 可是我看不
02/28 17:36, 18F

02/28 17:36, , 19F
來應該檢查哪邊
02/28 17:36, 19F

07/26 16:15, , 20F
我後來是直接存csv, 再讓SQL去讀csv(encoding設utf8)
07/26 16:15, 20F
文章代碼(AID): #1Ogzo-Z2 (R_Language)
文章代碼(AID): #1Ogzo-Z2 (R_Language)