R의 MySQL에서 UTF-8 텍스트를 가져오면 "???"가 반환됩니다.
나는 R에서 MySQL 데이터베이스의 UTF-8 텍스트를 가져오려다 막혔습니다.OS X에서 R(GUI와 명령줄을 통해 모두 시도)을 실행하고 있습니다. 여기서 기본 로케일은 en_US입니다.UTF-8, 어떤 시도를 해도 쿼리 결과에 ASC가 아닌 모든 것에 대해 "?"가 표시됩니다.2자.
설정을 해봤습니다.options(encoding='UTF-8')
,DBMSencoding='UTF-8'
ODBC를 통해 연결할 때, 설정Encoding(res$str) <- 'UTF-8'
결과를 가져온 후, 그리고 각 결과의 'utf8' 변이체를 가져온 후, 모두 소용이 없었습니다.명령줄 mysql 클라이언트에서 쿼리를 실행하면 결과가 올바르게 표시됩니다.
저는 완전히 난처합니다.왜 작동이 안 되는지, 아니면 내가 시도해야 할 다른 것들이 있습니까?
다음은 상당히 최소화된 테스트 사례입니다.
$ mysql -u root
mysql> CREATE DATABASE test;
mysql> USE test;
mysql> CREATE TABLE test (str VARCHAR(10)) ENGINE=InnoDB DEFAULT CHARSET=utf8;
Query OK, 0 rows affected (0.02 sec)
mysql> INSERT INTO test (str) VALUES ('こんにちは');
Query OK, 1 row affected (0.00 sec)
mysql> select * from test;
+-----------------+
| str |
+-----------------+
| こんにちは |
+-----------------+
1 row in set (0.00 sec)
RODBC와 RMySQL을 모두 사용하여 R에서 테이블을 쿼리하면 "???" str 열의 경우:
> con <- odbcDriverConnect('DRIVER=mysql;user=root', DBMSencoding='UTF-8')
> sqlQuery(con, 'SELECT * FROM rtest.test')
str
1 ?????
> library(RMySQL)
Loading required package: DBI
> con <- dbConnect(MySQL(), user='root')
> dbGetQuery(con, 'SELECT * FROM rtest.test')
str
1 ?????
완성도를 위해, 여기 제 세션이 있습니다.정보:
> sessionInfo()
R version 2.15.1 (2012-06-22)
Platform: x86_64-apple-darwin9.8.0/x86_64 (64-bit)
locale:
[1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8
attached base packages:
[1] stats graphics grDevices utils datasets methods base
other attached packages:
[1] RMySQL_0.9-3 DBI_0.2-5 RODBC_1.3-6
@chooban 덕분에 접속 세션이 utf8이 아닌 latin1을 사용하고 있다는 것을 알게 되었습니다.제가 찾은 두 가지 해결책은 다음과 같습니다.
- RMySQL의 경우 연결 후 쿼리 실행
SET NAMES utf8
연결 문자 집합을 변경합니다. - RODBC의 경우 다음을 사용하여 연결합니다.
CharSet=utf8
DSN 문자열에 저장됩니다.뛰지 못했습니다.SET NAMES
ODBC 경유로
이 질문은 나에게 올바른 방향을 가리켰습니다.
저는 이게 통했어요.전체 예시는 다음과 같습니다.
con = dbConnect(drv = MySQL(), user = user, password = password,
dbname = dbname, host=host)
dbSendQuery(con, "SET NAMES utf8mb4;")
dbSendQuery(con, "SET CHARACTER SET utf8mb4;")
dbSendQuery(con, "SET character_set_connection=utf8mb4;")
dbGetQuery(con, "SELECT * FROM WHATEVER")
적어도 해볼 만한 것이 있습니다.연결 후 "'character_set_%'와 같은 변수 표시"를 실행하고 결과를 출력합니다.다른 방법이 없으면 지정한 문자 집합 옵션이 사용되었는지 확인하는 것이 유용합니다.
언급URL : https://stackoverflow.com/questions/12869778/fetching-utf-8-text-from-mysql-in-r-returns
'programing' 카테고리의 다른 글
두 날짜 사이의 근무 일수 수 (0) | 2023.09.28 |
---|---|
람다 함수와 중첩 함수('def') 중 어느 것을 사용하는 것이 더 좋습니까? (0) | 2023.09.28 |
404를 유사한 URL로 리디렉션 (0) | 2023.09.28 |
문자열 보간 대 문자열.서식 (0) | 2023.09.28 |
동일한 테이블에 여러 인덱스를 동시에 만들 수 있는 데이터베이스가 있습니까? (0) | 2023.09.28 |