132 名前:nobodyさん[sage] 投稿日:2006/07/11(火) 13:06:21 ID:???
WEBrickで立ち上げて使っているんですが、しばらくするとデータベース
から取得した文字の表示が化けてしまいます。プロセスを切って再起動する
と正しく表示されます。
databaseのutf8設定をしていない時と同じような化け方なので、内部で
データベース接続が切れたときの再接続で SET NAMES utf8が発行されない
ケースがあるのかなぁなどと思っているのですが、よくわかりません。
このような現象に合っている方はいらっしゃいますか?
また、対応策等ご存じの方いらっしゃいますでしょうか?
Debian3.1 Sargeで関連パッケージはこんな感じです。
ruby 1.8.2-1
ruby1.8 1.8.2-7sarge2
mysql-server-4.1 4.1.11a-4sarge4
libmysql-ruby1.8 2.4.5-6.1
libdbd-mysql-ruby1.8 0.0.23-2
gem list
rails (1.1.4)
activerecord (1.14.3)
日本語(UTF8)対応設定は以下のようにしています。
[config/environment.rb]
$KCODE = "UTF8"
(続く)
133 名前:132[sage] 投稿日:2006/07/11(火) 13:07:38 ID:???
(続き)
[config/database.yml]
development:
adapter: mysql
database: foobar_development
username: ""
password:
host: localhost
encoding: utf8
[app/controllers/application.rb]
class ApplicationController < ActionController::Base
before_filter :set_charset
private
def set_charset
headers["Content-Type"] = "text/html; charset=UTF-8"
end
end
mysqldはデフォルトutf8にして、DB、テーブル等も作っていますが、
コマンドラインから接続した場合は、
mysql foobar
直後に SET NAMES utf8 を入力するか、
mysql --default-character-set foobar
としないと、文字化けしています。
何かヒントがあれば、教えてください。よろしくお願いします。
135 名前:nobodyさん[sage] 投稿日:2006/07/11(火) 23:23:05 ID:???
>131
http://www.mysql.gr.jp/mysqlml/mysql/msg/12306
もしかしたら、これかもしれない、、、、が確証はないのでMtSQLのバージョンあげられるようでしたら試してみて下さい。
自分は、PHPでMySQLの文字コードで泣いた人間なのでポスグレかsqliteばかりだ、、、
136 名前:nobodyさん[sage] 投稿日:2006/07/11(火) 23:24:29 ID:???
>132
同一症状です。
MySQL5.021でそうなっています。
MONGRELだと今のところその症状は出てません。
>>132
後ろ向きだが、set_charset の中で毎回設定すればいい。
ActiveRecord::Base.connection.execute("SET NAMES utf8")
これで直れば、32の推測通りARの不具合の可能性がでてくる。
まずは、これを試して問題を切り分けるのがよいと思われ。
MYSqlのML
http://www.mysql.gr.jp/mysqlml/mysql/msg/9530 で話題になっていたように、
ver. 4.1以降、クライアント/サーバー間でキャラクターセットが自動的に
変換されるようになったことに伴い、多くの方が文字化けといった問題に
悩まされていたかと思います。
この点については開発側に改善を要求してきましたが、4.1.15にて
"--skip-character-set-client-handshake" というオプションが導入されました。
http://dev.mysql.com/doc/refman/4.1/en/news-4-1-15.html
このオプションを指定することにより、クライアントのキャラクターセットが
サーバー側のキャラクターセットに合わせて自動的に設定され、
自動変換が発生しないようになります。特にver. 4.0から移行する際に、
このオプションの利用を徹底すれば、多くのトラブルが回避できるのでは
ないでしょうか。ぜひ、お試し下さい。