まめ畑

ゆるゆると書いていきます

Ruby Mysqlで文字化け?

RubyMysqlを使ってみようとして軽くはまってます。
日本語が文字化けというか、文字コードで表示されているのです。
実行しているコードは以下の物なのですが、原因が未だにわかっていません。


環境は。DBのVersionが4.1、文字コードUTF-8です。
最初は、コード実行じにlatin1になっていたので文字コードを指定したら、きちんとUTF8になっているのですが、だめでした。

Mysqlを5.x系にしないとだめなのかな?

require 'mysql'

#DBに接続
my = Mysql.init()
my.options(Mysql::SET_CHARSET_NAME,'utf8')
my.real_connect('localhost','ID','PASS','DB')

#クエリー発行
st = my.prepare('select * from hoge')
st.execute

#フェッチ
for i in 0...st.num_rows()
  data = st.fetch()
  puts data[1]
end

st.close


*追記
文字コードで表示されるという問題なのですが、いつもの癖で表示の確認にpメソッドを使っていた事が問題でした。
pメソッドは内部でinspectを呼び出して実行しています。
inspectって厄介なもので、「オブジェクトを人間が読める形式に変換した文字列を返します。」とリファレンスに書いてあるのですが、実際に返してくるものはわかりにくい。
マルチバイトの場合は、内部で格納している文字コードを返してきている模様。


Dateの場合は、#
僕には理解出来ません。


調べてたらこんな解説が。

inspect は文字列の前後に「"」文字を付けるだけでなく,文字列内の「"」文字をエスケープ列 \" にします。特殊な文字を表現する方法として,C/C++Java と同じく Ruby でも \r や \n や \x0A などのエスケープ列が利用できます。

http://www.okisoft.co.jp/esc/ruby/tut-01.html

ちょっとした機能だけど、シングルバイト文字しかpで確認しちゃいけないな。
というか、putsにしとけばよかった。


まだまだ勉強が足りない。