R dbplyr WHERE 子句 cp1250 字符集
R dbplyr WHERE clause cp1250 charset
所以我的 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'
它 returns 我 0 行。但!当我将字符串 'Hodgkinův lymfom'
的字符编码设置为 UTF-8 时,它 returns 我所有相关的行。我像这样将字符编码设置为 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。
顺便说一句,当我使用 SET NAMES 'cp1250'
进行以下 SELECT 语句时,行中的返回值正确显示:
SELECT *
FROM transpl
知道哪里出了问题吗?
这些字符集将十六进制 F9
视为 ů
:cp1250、cp1256、dec8、latin1、latin2、latin5。对于utf8/utf8mb4,它是十六进制C3B9
SET NAMES
宣布 客户端 的字符集。
但是您要存储到的列的字符集呢? SHOW CREATE TABLE
一探究竟。
做SELECT col, HEX(col) ...
时你得到F9
还是C3B9
?
更多讨论:
所以我的 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'
它 returns 我 0 行。但!当我将字符串 'Hodgkinův lymfom'
的字符编码设置为 UTF-8 时,它 returns 我所有相关的行。我像这样将字符编码设置为 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。
顺便说一句,当我使用 SET NAMES 'cp1250'
进行以下 SELECT 语句时,行中的返回值正确显示:
SELECT *
FROM transpl
知道哪里出了问题吗?
这些字符集将十六进制 F9
视为 ů
:cp1250、cp1256、dec8、latin1、latin2、latin5。对于utf8/utf8mb4,它是十六进制C3B9
SET NAMES
宣布 客户端 的字符集。
但是您要存储到的列的字符集呢? SHOW CREATE TABLE
一探究竟。
做SELECT col, HEX(col) ...
时你得到F9
还是C3B9
?
更多讨论: