Voglio calcolare un checksum di tutti i valori di una colonna in modo aggregato.Creare un checksum aggregato di una colonna
In altre parole, voglio fare un po 'equivalente di
md5(group_concat(some_column))
Il problema di questo approccio è:
- E' inefficiente. Deve concatenere tutti i valori della colonna come stringa in una memoria temporanea prima di passarla alla funzione md5
- group_concat ha una lunghezza massima di 1024, dopodiché tutto il resto verrà troncato.
(Nel caso in cui vi state chiedendo, è possibile garantire che il concat dei valori è in un ordine coerente, tuttavia, come ci crediate o no group_concat() accetta un ordine dalla clausola al suo interno, ad esempio group_concat(some_column order by some_column)
)
MySQL offre le funzioni di aggregazione bit per bit non standard BIT_AND(), BIT_OR() e BIT_XOR() che presumo sarebbe utile per questo problema. La colonna è numerica in questo caso, ma sarei interessato a sapere se c'era un modo per farlo con le colonne di stringhe.
Per questa particolare applicazione, il checksum non deve essere crittograficamente sicuro.
'SUM()' Non è la cosa giusta da usare qui, poiché due checksum diversi potrebbero sommare allo stesso valore abbastanza facilmente –
Come evitare un overflow numerico con questo approccio? – Robert