トップ «前の日記(2005-05-07) 最新 次の日記(2005-05-09)» 編集

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件) []
# 3 日坊主日記:encoding support for MySQL adapter (2005-12-07 21:23)

http://dev.rubyonrails.org/changeset/3165

おお。きれいに取り込まれている。
今後は手パッチしなくて済みます。:)