r dbplyr where子句cp1250字符集

qncylg1j  于 2021-06-21  发布在  Mysql
关注(0)|答案(1)|浏览(399)

所以我的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 包裹。首先,当我连接到db时,我发送以下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。
顺便说一下,当我用 SET NAMES 'cp1250' ,正确显示行中的返回值:

SELECT *
FROM transpl

你知道什么是错的吗?

tkclm6bt

tkclm6bt1#

这些字符处理十六进制 F9 作为 ů :cp1250,cp1256,dec8,拉丁语1,拉丁语2,拉丁语5。对于utf8/utf8mb4,它是十六进制的
C3B9 SET NAMES 宣布客户的角色集。
但是要存储到的列的字符集呢? SHOW CREATE TABLE 去发现。
什么时候做 SELECT col, HEX(col) ... 你明白吗 F9 或者 C3B9 ?
更多讨论:utf-8字符的问题;我看到的不是我储存的

相关问题