2017-06-13 23 views
-1

考慮一下:如何編碼[R字符串,以便他們沒有編碼錯誤讀取到MySQL

> scr<-paste("INSERT INTO ques2_log (freeze_time) value(",sQuote(now()),")") 

> scr

#> "INSERT INTO ques2_log (freeze_time) value(‘2017-06-13 23:46:16’)" 

如果我們養活這個簡單的SQL腳本到一個MySQL數據庫,如下所示:

dbExecute(db,scr1) 

MySQL數據庫引發以下錯誤:Error in .local(conn, statement, ...) : could not run statement: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '��2017-06-13 23:44:13’)' at line 1

我已經通過手動輸入測試了SQL腳本,它工作正常。

也很清楚,單引號是意想不到的字符。

我查閱了一些關於字符編碼的在線文章,並在通過RMySQL命令提交給數據庫之前嘗試了 enc2utf8(scr)。沒有效果。同樣的錯誤。

我也看了this

ALTER DATABASE ques2_log CHARACTER SET utf8 COLLATE utf8_general_ci;

但仍然是錯誤。

+0

是否有一個原因,你正在使用sQuote'而不是隻是普通的舊單'''?通常'sQuote'用於格式化輸出以顯示在屏幕上,這不是你在這裏做的。 – joran

+0

我正在使用sQuote通過單引號環繞** now()**的輸出。我想,用單引號括起一個函數的輸出是很困難的。 –

+0

您是否嘗試過'paste0(「'」,date(),「'」)'? – joran

回答

1

只需使用普通單引號,如:

paste0("'",date(),"'") 

sQuote產生不同的左側和右側的 「智能」 引號,作爲記錄在?sQuote

Single or double quote text by combining with appropriate single or double left and right quotation marks.

...,另外,在文檔明確指出此功能的預期用途是用於在屏幕上顯示面向用戶的消息的文本格式:

The purpose of the functions is to provide a simple means of markup for quoting text to be used in the R output, e.g., in warnings or error messages.

所以它通常不應該用於處理文本以編程方式使用。