Извлечение текста UTF-8 из MySQL в R возвращает «????»

Я застрял, пытаясь получить текст UTF-8 в базе данных MySQL из R. Я запускаю R на OS X (пробовал оба через GUI и командную строку), где локаль по умолчанию – en_US.UTF-8, и нет что я пытаюсь, результат запроса показывает «?» для всех символов, отличных от ASCII.

Я пробовал параметры options(encoding='UTF-8') , DBMSencoding='UTF-8' при подключении через ODBC, после чего Encoding(res$str) <- 'UTF-8' после получения результатов, а также Варианты ‘utf8’ каждого из них, все безрезультатно. Выполнение запроса из командной строки mysql-клиент показывает результаты правильно.

Я полностью в тупике. Любые идеи, почему это не работает, или другие вещи, которые я должен попробовать?

Вот довольно минимальный тестовый пример:

 $ mysql -u root mysql> CREATE DATABASE test; mysql> USE test; mysql> CREATE TABLE test (str VARCHAR(10)) ENGINE=InnoDB DEFAULT CHARSET=utf8; Query OK, 0 rows affected (0.02 sec) mysql> INSERT INTO test (str) VALUES ('こんにちは'); Query OK, 1 row affected (0.00 sec) mysql> select * from test; +-----------------+ | str | +-----------------+ | こんにちは | +-----------------+ 1 row in set (0.00 sec) 

Запрос таблицы в R с использованием RODBC и RMySQL показывает «?????» для столбца str:

 > con  sqlQuery(con, 'SELECT * FROM rtest.test') str 1 ????? > library(RMySQL) Loading required package: DBI > con  dbGetQuery(con, 'SELECT * FROM rtest.test') str 1 ????? 

Для полноты, вот моя sessionInfo:

 > sessionInfo() R version 2.15.1 (2012-06-22) Platform: x86_64-apple-darwin9.8.0/x86_64 (64-bit) locale: [1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8 attached base packages: [1] stats graphics grDevices utils datasets methods base other attached packages: [1] RMySQL_0.9-3 DBI_0.2-5 RODBC_1.3-6 

Благодаря @chooban я узнал, что сеанс связи использует latin1 вместо utf8. Вот два решения, которые я нашел:

  • Для RMySQL после подключения запустите запрос SET NAMES utf8 чтобы изменить набор символов соединения.
  • Для RODBC подключитесь с помощью CharSet=utf8 в строке DSN. Я не смог запустить SET NAMES через ODBC.

Этот вопрос указал мне в правильном направлении.

Попробуй хотя бы по крайней мере. После того, как вы подключились, запустите «SHOW VARIABLES LIKE» character_set_% ‘»и распечатайте результаты. Если ничего другого, это полезная проверка, чтобы увидеть, были ли заданы параметры набора символов, которые вы указали.

Это сработало для меня. Вот полный пример:

 con = dbConnect(drv = MySQL(), user = user, password = password, dbname = dbname, host=host) dbSendQuery(con, "SET NAMES utf8mb4;") dbSendQuery(con, "SET CHARACTER SET utf8mb4;") dbSendQuery(con, "SET character_set_connection=utf8mb4;") dbGetQuery(con, "SELECT * FROM WHATEVER") 
  • UTF8 в / из широкого преобразования символов в STL
  • Проблемы с кодировкой символов Visual Studio C ++
  • Сколько символов может кодировать UTF-8?
  • Как определить правильную кодировку для read.csv?
  • Как установить кодировку в .getJSON JQuery
  • Преобразование Unicode в ASCII без ошибок в Python
  • Сохранить данные на арабском языке в базе данных MySQL
  • Как поддерживать кодировку UTF-8 в Eclipse
  • Android: проблемы с Unicode / Charset при отправке SMS (sendTextMessage)
  • Как преобразовать между ISO-8859-1 и UTF-8 в Java?
  • Как распознавать символы UTF-8 в кодированном латинском столбце - MySQL
  • Interesting Posts

    Можно ли реализовать гладкую прокрутку в виде списка WPF?

    Советы и трюки Vim и Ctags

    Ошибка: существует табличное пространство для таблицы xxx. Пожалуйста, ОТКРЫВАЙТЕ табличное пространство до ИМПОРТА

    mySQL долгота и запрос широты для других строк в радиусе x мили

    Формат NSDate, выводящий неверную дату

    Отключить звук «разблокировки» в Windows 8

    Существует ли эффективный алгоритм для создания двумерного вогнутого корпуса?

    C #: Синхронизировать положение прокрутки двух RichTextBoxes?

    Spring MVC – Как вернуть простую строку в JSON в Rest Controller

    Почему RijndaelManaged и AesCryptoServiceProvider возвращают разные результаты?

    xcode swift am / pm время до 24-часового формата

    Есть ли способ изменить цвет «выделенного файла» в Windows 7?

    Как создать пользовательский валидатор в Play Framework 2.0?

    Создание веб-запроса на веб-страницу, для которой требуется проверка подлинности Windows

    Ошибка: значение null в записи: incrementalFolder = null

    Давайте будем гением компьютера.