2010-01-25 5 views
51

Ho una query che utilizza GROUP_CONCAT di mysql su un campo intero.
Sto utilizzando PHPMYADMIN per sviluppare questa query. Il mio problema è che invece di mostrare 1,2 che è il risultato del campo concatenato, ottengo [BLOB - 3B].utilizzando group_concat in PHPMYADMIN mostrerà il risultato come [BLOB - 3B]

Query è

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

(entrambi i campi sono unsigned int, entrambi non sono unici)

Cosa devo aggiungere a vedere i risultati effettivi?

risposta

19

Appena sopra il risultato della query (a sinistra) si vedrà +options. Premerlo e segnare

Mostra contenuto BLOB

+0

Proprio per aiutare gli utenti che non possono vedere il '+ options', non tutte le configurazioni di phpMyAdmin lo hanno – Ejaz

79

Sembra che GROUP_CONCAT si aspetti che quel valore sia una stringa. Ho appena incontrato lo stesso problema. Risolto convertendo la colonna int in una stringa in questo modo:

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

Ho pensato di condividere nel caso ve lo continui ad avere un problema con questo.

39

According to the MySQL documentation, CAST(expr AS type) è SQL standard e dovrebbe pertanto essere perferred. Inoltre, puoi omettere la lunghezza della stringa. Pertanto, suggerirei le seguenti:

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

Se si ha accesso al file config.inc.php nella directory phpMyAdmin, poi penso che la soluzione migliore è quella di cambiare questa linea:

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

a questo:

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

Se hai l'estensione mysqli disponibile, usala. È più sicuro, un po 'più ottimizzato e gestisce di default il tipo BLOB di utf-8. Le voci [BLOB] dovrebbero iniziare a essere visualizzate come valori senza dover aggiungere altre opzioni di configurazione speciali.

+0

sarà fare un tentativo - tnx! –

21

Per me, questo ha aiutato (l'ho trovato in questo blog post):

Nel mio caso il parametro GROUP_CONCAT era stringa ma la funzione ancora portato ad un BLOB, ma la conversione del risultato della GROUP_CONCAT funzionato.

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

Grazie Janne. Ottima soluzione. –

+0

Questo mi aiuta :) Grazie Janne – junior

+0

Voglio abbracciarti e dare un calcio al ragazzo che ha progettato il database che sto usando per usare la codifica 'latin1'. Grazie. –

0

Si può fare questo:

set session group_concat_max_len = 512; 

Se group_concat_max_len è più di 512 la query restituirà byte []. Ma puoi passare ad una stringa.

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