日本語の文字列をDBに書き込んで再度読み出すと、最初の文字列とは比較してもtrueにならない。表示しても文字化けしているようには見えない。
# coding: windows-31j require 'sequel' db = Sequel.odbc("MSDB", :user=>'hoge', :password=>'fuga', :db_type => "mssql") db.identifier_input_method = nil s1 = "ほげ" db[:user].where(uid: 1).update(username: s1) s2 = db[:user][uid: 1][:username] puts s1 # => ほげ puts s2 # => ほげ p s1 == s2 # => false
相当悩んだ。お互いをuppack(H*)して比較してみたりとか。いろいろやって読み出したらエンコードが変わっていることに気がついた。
"sequel エンコード"でググってみれば、以下にすぐたどり着く。
http://d.hatena.ne.jp/shibason/20100304/1267697379
おおぅ・・・まじか。
s1 = "ほげ" db[:user].where(uid: 1).update(username: s1) s2 = db[:user][uid: 1][:username].force_encoding("Windows-31J") puts s1 # => ほげ puts s2 # => ほげ p s1 == s2 # => true
いや、これはないだろう。絶対に忘れる。
s1 = "ほげ" db[:user].where(uid: 1).update(username: s1) class User < Sequel::Model(:user) plugin :force_encoding, "Windows-31J" end s2 = User[uid: 1][:username] puts s1 # => ほげ puts s2 # => ほげ p s1 == s2 # => true
うーん、これで我慢するしかないのか。正直、使いたくなくなった