1

Rails 3.2.7 jruby 1.6.7.2(ruby-1.9.2-p312)でSQL Server2008jrubyを使用しています

次の表

create_table "Users", :primary_key => "id" do |t|
  t.integer "id", :limit => 19, :default => 1, :null => false
  t.string "login", :limit => 80, :null => false
  t.binary "password"
end

テーブルにデータを入力すると、問題なくレコードをプルバックできます。保存しようとすると、次のエラーが発生します。

Failure/Error: @user.save!
 ActiveRecord::StatementInvalid:
   ActiveRecord::JDBCError: Implicit conversion from data type varchar to varbinary is not allowed. Use the CONVERT function to run this query.: INSERT INTO [Users] ( [login], [password]) VALUES ( N'user', '')
4

1 に答える 1

0

これを考えると

t.binary "password"

この

INSERT INTO [Users] ( [login], [password]) VALUES ( N'user', '')

INSERTフィールドがバイナリとして定義されている場合、ステートメントにはパスワードの文字列が含まれます。

SQL Serverでは、これら2つのタイプは互換性がありません。バイナリ値は0x<bytes>、つまり、として指定されます0xAABBCCDD

ステートメントに渡されるパスワード値をINSERTその種類の形式(おそらくハッシュ関数からのバイト配列出力)に変換するか、テーブルの列タイプを文字列に変更する必要があります。

于 2012-08-07T23:19:42.327 に答える