1

我在 rails 3.2.7 jruby 1.6.7.2 (ruby-1.9.2-p312) 上使用 sql server 2008 jruby

下表

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 中,这两种类型不兼容。二进制值指定为0x<bytes>,即0xAABBCCDD

您需要将传递给INSERT语句的密码值转换为那种格式(可能是散列函数的字节数组输出),或者将表列类型更改为字符串。

于 2012-08-07T23:19:42.327 回答