Ruby Mysqlで文字化け?
RubyでMysqlを使ってみようとして軽くはまってます。
日本語が文字化けというか、文字コードで表示されているのです。
実行しているコードは以下の物なのですが、原因が未だにわかっていません。
環境は。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にしとけばよかった。
まだまだ勉強が足りない。