1

所以我的 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

现在我想使用dbplyr包使用 MySQL 数据库。首先,当我连接到数据库时,我发送以下 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'

x然后,当我将变量放入 WHERE 子句时,SELECT 语句如下所示:

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

尽管事务的编码是 cp1250,但它可以使用 UTF-8 而不是 cp1250。

顺便说一句,当我使用 执行以下 SELECT 语句时SET NAMES 'cp1250',行中的返回值会正确显示:

SELECT *
FROM transpl

关于什么可能是错的任何想法?

4

1 回答 1

2

这些字符集将十六进制F9视为ů:cp1250、cp1256、dec8、latin1、latin2、latin5。对于 utf8/utf8mb4,它是十六进制C3B9

SET NAMES宣布客户端的字符集。

但是您要存储到的列的字符集呢? SHOW CREATE TABLE找出答案。

你什么SELECT col, HEX(col) ...时候得到F9or C3B9

更多讨论:UTF-8 字符问题;我看到的不是我存储的

于 2018-05-06T04:18:58.523 回答