2010-01-25 14 views
51

Tengo una consulta que usa GROUP_CONCAT de mysql en un campo entero.
Estoy usando PHPMYADMIN para desarrollar esta consulta. Mi problema es que en lugar de mostrar 1,2, que es el resultado del campo concatenado, obtengo [BLOB - 3B].usando group_concat en PHPMYADMIN mostrará el resultado como [BLOB - 3B]

consulta es

SELECT rec_id,GROUP_CONCAT(user_id) 
FROM t1 
GROUP BY rec_id 

(ambos campos son unsigned int, ambos no son únicos)

¿Qué debo añadir para ver los resultados reales?

Respuesta

19

Justo por encima del resultado de la consulta (a la izquierda), verá +options. Presionar y marcar

Mostrar contenido del BLOB

+0

sólo para ayudar a los usuarios que no pueden ver el '+ options', no todas las configuraciones de phpmyadmin tienen que – Ejaz

79

Parece que GROUP_CONCAT espera que el valor sea una cadena. Me encontré con el mismo problema. Resuelto mediante la conversión de la columna de int a una cadena de este modo:

SELECT rec_id,GROUP_CONCAT(CONVERT(user_id, CHAR(8))) 
FROM t1 
GROUP BY rec_id 

Robusto me gustaría compartir en el caso de que todavía estaba teniendo un problema con esto.

39

According to the MySQL documentation, CAST(expr AS type) es SQL estándar y, por tanto, debe ser preferido. Además, puede omitir la longitud de la cadena. Por lo tanto, me gustaría sugerir lo siguiente:

SELECT rec_id, GROUP_CONCAT(CAST(user_id AS CHAR)) 
FROM t1 
GROUP BY rec_id 
-1

Si tiene acceso al archivo config.inc.php en el directorio phpMyAdmin, a continuación, Creo que la mejor solución es cambiar esta línea:

 
$cfg['Servers'][$i]['extension'] = 'mysql'; 

a esto:

 
$cfg['Servers'][$i]['extension'] = 'mysqli'; 

Si tiene la extensión mysqli disponible, úselo. Es más seguro, está un poco más optimizado y maneja el tipo BLOB de utf-8 mejor por defecto. Sus entradas [BLOB] deberían comenzar a aparecer como sus valores sin tener que agregar ninguna otra opción de configuración especial.

+0

dará una oportunidad - TNX! –

21

Para mí, esto ayudó (lo encontraron en este blog post):

En mi caso, el parámetro a GROUP_CONCAT era cadena, pero la función sigue resultó en un BLOB, pero convertir el resultado de la GROUP_CONCAT trabajó.

CONVERT(GROUP_CONCAT(user_id) USING 'utf8') 
+2

Gracias Janne. Gran solución –

+0

Eso me ayuda :) Gracias Janne – junior

+0

Quiero abrazarte y patear al tipo que diseñó la base de datos que estoy usando para usar la codificación 'latin1'. Gracias. –

0

Usted puede hacer esto:

set session group_concat_max_len = 512; 

Si group_concat_max_len es más de 512 que devolverá la consulta byte []. Pero puede pasar a una cadena.

System.Text.Encoding.Default.GetString((byte[])DataTable.Rows[0][0]); 
Cuestiones relacionadas