0

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 エンコーディングと照合を使用しています。

4

1 に答える 1

1

ハンドシェイクが発生し、クライアントは最終的に MySQL に を使用するように指示しますlatin1。ハンドシェイクを無効にするか、最初の接続で無効にすることができますSET NAMES utf8

参照: http://dev.mysql.com/doc/refman/5.6/en/server-options.html#option_mysqld_character-set-client-handshake

于 2014-07-07T16:17:15.293 に答える