UNIX (Linux) の MySQL DB には UTF-8 でデータが格納されている。Windows 上の R から

RMySQL でデータを取得すると、全て文字化けしてしまう。



<p>しばらく悩んだ結果、my.ini (UNIX での my.cnf に相当) でクライアントの文字エンコーディングを指定すればよいことが判った。</p>

<p>MySQL インストールディレクトリの my.ini の最後に、以下の2行を追加することで解決。</p>

<pre class="prettyprint">[client]
default-character-set=utf8
</pre>

<p>DB から読み込んだデータは UTF-8 なので、SJIS を期待しているコンソールにそのまま表示させると化ける。そこで

Encoding() の出番。</p>

<pre class="prettyprint">Encoding(table1$column1) <- ‘UTF-8’
</pre>

<p>このベクトルは UTF-8 ですよ、と教えてあげることで、コンソールに化けずに表示できるようになる。</p>
<p>しかし、このデータを dbWriteTable() すると、また化ける。</p>
<pre class="prettyprint">dbWriteTable(con, ‘test.rarely_used_menus_since_200807’, q)
</pre>
<p>生成されたテーブルを調べてみると、DEFAULT CHARSET が latin1 になっていた。alter database db1
charset utf8 することで、生成されるテーブルの charset も UTF-8 になった。しかし、これでも文字化けする。データに
Encoding() しなければ dbWriteTable() 時には化けない。しかしコンソールで化ける。困った。</p>
<table border="1"><tr>
<th> </th>
<th>dbWriteTable()</th>
<th>コンソール出力</th>
</tr>
<tr>
<th>Encoding() を指定する場合</th>
<td>化ける</td>
<td>化けない</td>
</tr>
<tr>
<th>Encoding() を指定しない場合</th>
<td>化けない</td>
<td>化ける</td>
</tr>
</table>
<p>あともう一息といった感じ。</p>