R dbplyr WHERE пункт cp1250 charset

0

Таким образом, мой R использует cc1250 charset, sessionInfo():

R version 3.4.2 (2017-09-28)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows 7 x64 (build 7601) Service Pack 1

Matrix products: default

locale:
[1] LC_COLLATE=Czech_Czech Republic.1250  LC_CTYPE=Czech_Czech Republic.1250    LC_MONETARY=Czech_Czech Republic.1250
[4] LC_NUMERIC=C                          LC_TIME=Czech_Czech Republic.1250

Теперь я хочу работать с базой данных MySQL, используя пакет dbplyr. Сначала, когда я подключаюсь к БД, я отправляю следующий запрос mysql:

SET NAMES 'cp1250';

Затем, когда я отправляю инструкцию SELECT следующим образом:

SELECT dg_group
FROM transpl
WHERE 'dg_group' = 'Hodgkinův lymfom'

он возвращает мне 0 строк. НО! Когда я устанавливаю кодировку символов 'Hodgkinův lymfom' в UTF-8, он возвращает мне все соответствующие строки. Я установил кодировку символов в UTF-8 следующим образом:

x <- 'Hodgkinův lymfom'
Encoding(x) <- 'UTF-8'

Тогда инструкция SELECT выглядит так, когда я помещаю переменную x в предложение WHERE:

SELECT dg_group
FROM transpl
WHERE 'dg_group' = 'Hodgkin<f9>v lymfom'

Хотя кодировка транзакций - cp1250, она работает с UTF-8, но не с cp1250.

Кстати, когда я делаю следующий оператор SELECT с помощью SET NAMES 'cp1250', возвращаемые значения в строках отображаются правильно:

SELECT *
FROM transpl

Любая идея о том, что может быть неправильным?

Теги:
dplyr
character-encoding
dbplyr

1 ответ

0

Эти кодировки обрабатывают гексагон F9 как ů: cp1250, cp1256, dec8, latin1, latin2, latin5. Для utf8/utf8mb4 это шестнадцатеричный C3B9

SET NAMES объявляет кодировку клиента.

Но как насчет кодировки колонки, в которую вы храните? SHOW CREATE TABLE чтобы узнать.

При выполнении SELECT col, HEX(col)... вы получаете F9 или C3B9?

Дополнительная дискуссия: проблема с символами UTF-8; я не вижу того, что я хранил

  • 0
    В то время, когда я писал свой вопрос, я не очень понимал, что происходит и почему возникла описанная ситуация вместо «ожидаемой». В то время я больше не понимал эту вещь. Однако, поскольку я прошел через другой опыт в этой области, я снова столкнулся с моим вопросом, и теперь я понимаю, что происходит, и поэтому я отметил ваш ответ как правильный. Спасибо.

Ещё вопросы

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