Проблемы с кодировкой при попытке записи данных из R в MySQL

0

Мои данные содержат специальные символы, такие как немецкие умлауты.

p=structure(list(ppl_code = c(992621L, 992381L, 992136L, 991989L, 
991898L, 991759L, 991681L, 991593L, 991294L, 991036L, 990934L, 
990751L, 990535L, 990411L, 990182L, 989507L), proj_name = c("klo", 
"Dalbygda", "Oosterhorn", "Hån", "Yatir", "Montigny la Cour", 
"Valle Hermoso", "Acciona Honawad - 120 MW", "Apfeltrang", "RiaBlades", 
"General Acha", "Lindau-Böhlitz", "Apfeltrang", "Alcazar Round 2", 
"Peckelsheim", "Linnich 3")), .Names = c("ppl_code", "proj_name"
), row.names = 15:30, class = "data.frame")

Когда я пытаюсь записать его в базу данных MySQL:

conn <- dbConnect(
       drv = RMySQL::MySQL(),
       dbname = "mydb",
       host = "#####",
       username = "#####",
       password = "#####")

dbWriteTable(conn, value = p, name = "MyTable",row.names=FALSE)

Я получаю ошибку кодирования:

could not run statement: Invalid utf8 character string: 'Lindau-B'

Я проверил несколько сообщений по этой проблеме, как здесь и здесь, но все они являются общим объяснением без четкого решения! может ли кто-нибудь помочь мне с четким запросом, который мог бы решить эту проблему?

  • 0
    UTF-8 задыхается от умлаута над o. Это не распознанный символ в английской версии, поэтому вам нужно найти способ сделать слово приемлемым для sql, либо удалить его и заменить на o, либо найти другую парадигму кодирования
  • 0
    @sconfluentus, но если я запишу свою таблицу в файл csv и снова прочту ее, она будет работать: write.csv(p, file = "tmp.csv", fileEncoding = "utf8", quote = FALSE, row.names = FALSE) dbWriteTable(conn, value = "tmp.csv", name = "test1", append = TRUE, row.names = FALSE, sep = ",", quote='\"', eol="\r\n") Я хотел бы найти способ избежать этого глупого преобразования CSV!
Показать ещё 1 комментарий
Теги:
utf-8
encoding
rmysql

1 ответ

0

Вам нужно сообщить, что используется UTF-8.

Tool -> Global Options -> Code -> Saving and put UTF-8

rs <- dbSendQuery(con, 'SET NAMES utf8')

Ещё вопросы

Сообщество Overcoder
Наверх
Меню