ActiveRecord ArgumentError:负字符串大小(或大小太大)

时间:2012-05-21 18:32:15

标签: ruby-on-rails activerecord

我已经和这个人一起工作了几天。这是ActiveRecord错误和应用程序跟踪。

ArgumentError: negative string size (or size too big): 
EXEC sp_executesql N'SELECT [ops_jobs_join].* FROM [ops_jobs_join] 
WHERE (work_center_id = N''M*1053'' OR work_center_id = N''M*1035'' OR
      work_center_id = N''M*1037'' OR work_center_id = N''M*1036'') AND
      (status != N''C'') AND (start_date != N'''') AND 
      (start_date >= N''20120516'') AND (comp_date <= N''20120527'') AND 
      (work_order NOT LIKE N''LA%'') 
ORDER BY work_center_id ASC, start_date ASC, starting_shift_num ASC, 
      status ASC, priority ASC, comp_date ASC, ending_shift_num ASC, 
      due_date ASC, sequence_number ASC'

事实证明,如果我调用Op.all,我会收到此错误:

  

ActiveRecord ArgumentError:负字符串大小(或大小太大)

如果我忽略使用的列可能包含unicode字符,它可以正常工作。所有数据都存储在数据库中没有问题,但由于某些原因rails3没有它。

某些where子句将返回记录,而其他子句会导致相同的错误:

  

activerecord-sqlserver-adapter(3.2.4)lib / active_record / connection_adapters / sqlserver / database_statements.rb:421:in`fetch_all'

这与这两个帖子类似:

似乎第一篇文章中的解决方案是改变我想要避免的宝石。

我查看了我的表格,我认为我没有使用任何关键字作为字段名称。

我使用与此类似的其他查询,它们工作正常。唯一的区别是我在where子句中使用的值(work_center_id = N''M * 1053'')。

1 个答案:

答案 0 :(得分:1)

用于数据操作的Rails默认编码是UTF8,您还需要在数据库中使用此编码。 改变它,一切都必须好。