2012-05-21 17 views
7

He estado trabajando con este durante unos días. Aquí está el error de ActiveRecord y el seguimiento de la aplicación.ActiveRecord ArgumentError: tamaño de cadena negativo (o tamaño muy grande)

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' 

Resulta que si llamo Op.all consigo este error:

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

Si hago caso de la columna que utiliza puede contener caracteres Unicode que funciona bien. Todos los datos se almacenan en la base de datos sin problemas, pero por alguna razón Rails3 no los tiene.

Algunas cláusulas where volverán registros, mientras que otros resultan en el mismo error:

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

Es similar a estos dos mensajes:

Parece que la solución en la primera publicación es cambiar la gema que me gustaría evitar.

Miré mi mesa y no creo que esté usando palabras clave como nombres de campo.

Uso otras consultas similares a esta y funcionan bien. La única diferencia son los valores que uso en la cláusula where (work_center_id = N''M * 1053 '').

+0

Esto se debe probablemente a que la intercalación en su base de datos del Servidor SQL y la codificación que ActiveRecord espera usar no coinciden. Ver [aquí] (http://www.archivum.info/comp.lang.ruby/2009-03/01906/Re-Ruby-1.9-OS-X-command-line-negative-string-size- (ArgumentError) .html) para un problema similar. ¿Puedes publicar lo que son? – PinnyM

+1

La intercalación de mi base de datos es SQL_Latin1_General_CP437_CI_AS y no estoy seguro de qué espera ActiveRecord. Trataré de investigarlo. Sé que tengo otras bases de datos con la misma intercalación que funcionan bien. – riddler

+0

Rails usa UTF8 – ctilley79

Respuesta

1

La codificación predeterminada de Rails para manipular con datos es UTF8, necesita usar esta codificación también en su base de datos. Cámbielo y todo tiene que estar bien.

Cuestiones relacionadas