R dbplyr WHERE пункт cp1250 charset - PullRequest
0 голосов
/ 05 мая 2018

Так что мой R использует кодировку cp1250, 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

Есть идеи, что может быть не так?

1 Ответ

0 голосов
/ 06 мая 2018

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

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

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

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

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

...