2012-05-21 8 views
7

Ich arbeite seit ein paar Tagen mit diesem. Hier ist der ActiveRecord-Fehler und der Anwendungstrace.ActiveRecord ArgumentError: negative String-Größe (oder Größe zu groß)

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' 

Es stellt sich heraus, ob ich Op.all nenne ich diesen Fehler:

ActiveRecord ArgumentError: negative string size (or size too big)

Wenn ich die Spalte ignorieren, die Unicode-Zeichen enthalten verwendet, kann es gut funktioniert. Alle Daten werden ohne Probleme in der Datenbank gespeichert, aber aus irgendeinem Grund hat rails3 es nicht.

Einige wo Klauseln Datensätze zurück, während andere im gleichen Fehler führen:

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

Es ist ähnlich wie diese beiden Beiträge:

Es scheint als wäre die Lösung im ersten Post, den Edelstein zu ändern, den ich gerne vermeiden würde.

Ich schaute auf meinen Tisch und ich glaube nicht, dass ich irgendwelche Schlüsselwörter als Feldnamen verwende.

Ich benutze andere Abfragen ähnlich wie diese und sie funktionieren gut. Der einzige Unterschied sind die Werte, die ich in der where-Klausel verwende (work_center_id = N''M * 1053 '').

+0

Dies liegt wahrscheinlich daran, dass die Sortierung in Ihrer SQL-Server-Datenbank und die von ActiveRecord erwartete Codierung nicht übereinstimmen. Siehe [hier] (http://www.archivum.info/comp.lang.ruby/2009-03/01906/Re-Ruby-1.9-OS-X-command-line-negative-string-size- (ArgumentError) .html) für ein ähnliches Problem. Kannst du posten, was sie sind? – PinnyM

+1

Die Sortierung meiner Datenbank ist SQL_Latin1_General_CP437_CI_AS und ich bin mir nicht sicher, was ActiveRecord erwartet. Ich werde es versuchen und recherchieren. Ich weiß, dass ich andere Datenbanken mit der gleichen Kollatierung habe, die gut funktionieren. – riddler

+0

Rails verwendet UTF8 – ctilley79

Antwort

1

Rails Standardcodierung für Datenmanipulationen ist UTF8, Sie müssen diese Codierung auch in Ihrer Datenbank verwenden. Ändern Sie es und alles muss in Ordnung sein.