R から MySQL データベースに接続し、「set names utf8」ディレクティブを実行しました。
library(RMySQL)
con<-dbConnect(MySQL(), user='john', password='secret', dbname='awesome', host='myhost')
dbSendQuery(con, "SET NAMES UTF8; ")
これは通常、クエリから UTF8 データを取得したい場合に有効です。ただし、簡単なチェックを行うと、すべての変数が正しく設定されているわけではないことがわかります
dbGetQuery(con, "SHOW VARIABLES LIKE 'character_set_%'")
# Variable_name Value
#1 character_set_client latin1
#2 character_set_connection latin1
#3 character_set_database utf8
#4 character_set_filesystem binary
#5 character_set_results latin1
#6 character_set_server latin1
#7 character_set_system utf8
ここで、 character_set_client 変数が設定されていないことは明らかです。明示的に設定しても役に立ちません。実際、それは完全に無視されているようです。
dbSendQuery(con, "SET character_set_client=utf8; ")
dbGetQuery(con, "SHOW VARIABLES LIKE 'character_set_%'")
# Variable_name Value
#1 character_set_client latin1
#2 character_set_connection latin1
#3 character_set_database utf8
#4 character_set_filesystem binary
#5 character_set_results latin1
#6 character_set_server latin1
#7 character_set_system utf8
これを設定して、接続が UTF8 でエンコードされたテキストを返すようにするにはどうすればよいですか? スキーマは utf8 エンコーディングと照合を使用しています。