【发布时间】:2012-05-21 18:32:14
【问题描述】:
这几天我一直在使用它。这是 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'
跟这两个帖子差不多:
似乎第一篇文章中的解决方案是更改我想避免的 gem。
我查看了我的表格,我认为我没有使用任何关键字作为字段名称。
我使用与此类似的其他查询,它们工作正常。唯一的区别是我在 where 子句中使用的值 (work_center_id = N''M*1053'')。
【问题讨论】:
-
这可能是因为您的 SQL-Server 数据库的排序规则和 ActiveRecord 期望使用的编码不匹配。有关类似问题,请参阅here。你能发布它们是什么吗?
-
我的数据库的排序规则是 SQL_Latin1_General_CP437_CI_AS,我不确定 ActiveRecord 的预期。我会尝试研究它。我确实知道我有其他数据库具有相同的排序规则,它们运行良好。
-
我认为问题是我的列之一包含 unicode 字符。数据库处理 unicode 很好,但 rails 不会。虽然我知道 rails 应该处理 unicode。
-
请用解决方案回答您自己的问题并接受它,以便其他人可以看到它已得到解决。编辑问题标题不是办法。
标签: ruby-on-rails activerecord