作者augustana (微小的希望)
看板R_Language
標題[問題] RODBC匯入SQL Server中文亂碼問題
時間Tue Feb 21 14:22:51 2017
[問題類型]:
程式諮詢(我想用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
→ cywhale: odbcConnect參數DBMSencoding設設看 02/22 08:59
→ augustana: 設過惹 BIG5, UTF-8, WINDOWS-1252, gbk都亂碼Q__Q 02/22 10:23
推 cywhale: 如果用sql server driver? odbcDriverConnect('driver= 02/22 10:47
→ cywhale: {SQL Server};server=...;...) 我自己這樣用沒遇過亂碼 02/22 10:48
→ augustana: 請問這時候的server就是我之前odbcconnect取好的那個 02/22 12:00
→ augustana: "MY_DB"嗎 他說不存在或access_denied 02/22 12:01
→ augustana: odbcDriverConnect('driver={SQL Server};server="MY_D 02/22 12:02
→ augustana: B";trusted_connection=true') 我是這樣寫 02/22 12:02
→ augustana: 我server改成原始的server後成功惹~~ 不過還是亂碼Q__Q 02/22 13:49
→ augustana: 我在odbcDriverConnect上加DBMSencoding也沒有用 然後 02/22 14:05
→ augustana: 匯出csv要特別加fileEncoding = 'UTF-8'才會成功 02/22 14:06
→ augustana: 更正 加了DBMSencoding後會變NULL 不管是是不是driver 02/22 14:10
→ cywhale: 我覺得會不會是sql server設定而不是R連接sql server問題 02/22 16:18
→ augustana: 我現在也有這感覺XD 我找到答案再更新 02/22 16:26
→ augustana: 我剛看惹SQL設定 但他跟正常的中文表所有屬性都一樣 02/23 14:38
→ augustana: 感覺應該是英文作業系統的關係 在R到SQL中間出了問題 02/23 14:39
推 obarisk: 去找系統odbc驅動程式設定看看 02/25 06:52
→ augustana: 如果是說ODBC資料來源管理員的話 是我設的 可是我看不 02/28 17:36
→ augustana: 來應該檢查哪邊 02/28 17:36
→ augustana: 我後來是直接存csv, 再讓SQL去讀csv(encoding設utf8) 07/26 16:15