3 日坊主日記
2005-05-08 [長年日記]
_ [Rails][MySQL] set names sjis, binary, etc.
SJIS 0x5C (\) に関して、 mysql-ruby-2.5 から mysql-ruby-2.5.2 に上げたときの error は控えていなかったのだけど、さっき mysql-ruby-2.6 を試して backtrace を控えることができた。それは次のようなもの (注: これは RoR ではない。DBI を使っている):
DBI::DatabaseError Illegal mix of collations (sjis_japanese_ci,IMPLICIT) and (latin1_swedish_ci,COERCIBLE) for operation '=' /usr/local/lib/ruby/site_ruby/1.8/DBD/Mysql/Mysql.rb:403:in `execute'
ここで execute している SQL は SJIS で記述した日本語を含むものであった。mysqld は --default-character-set=sjis なので、set names sjis すると通るようになる。
しかし set names sjis であっても Mysql.quote がうまくいかないという問題がある。これについて [mysql 11344] でとみたさんに教えてもらった方法を試してみた。
db = Mysql.init
db.options(Mysql::SET_CHARSET_NAME, 'sjis')
db.connect('localhost', 'user', 'password', 'database')
...
RoR 上で MySQL の charset にまつわる問題としては quote のほかに binary がある。 AR の test/binary_test.rb が sjis な DB では通らない。通すには set names binary する必要がある。 これらの問題は adapter 側で対処すべきだろう。
[ツッコミを入れる]
本日のTrackBacks(全1件)
[]
http://dev.rubyonrails.org/changeset/3165
おお。きれいに取り込まれている。
今後は手パッチしなくて済みます。:)