Quiero calcular una suma de comprobación de todos los valores de una columna en conjunto.Crear una suma de comprobación agregada de una columna
En otras palabras, quiero hacer algo equivalente a
md5(group_concat(some_column))
El problema con este enfoque es:
- Es ineficiente. Tiene que hacer coincidir todos los valores de la columna como una cadena en algún almacenamiento temporal antes de pasarlo a la función md5
- group_concat tiene una longitud máxima de 1024, después de lo cual todo lo demás se truncará.
(En caso de que se esté preguntando, puede asegurarse de que el concat de los valores está en un orden coherente, sin embargo, que aunque no lo crean GROUP_CONCAT() acepta una orden por la cláusula dentro de ella, por ejemplo group_concat(some_column order by some_column)
)
MySQL ofrece las funciones de agregado bit a bit no estándar BIT_AND(), BIT_OR() y BIT_XOR() que supongo que serían útiles para este problema. La columna es numérica en este caso, pero me gustaría saber si había una manera de hacerlo con columnas de cadenas.
Para esta aplicación en particular, la suma de verificación no tiene que ser criptológicamente segura.
'SUM()' No es lo correcto para usar aquí, ya que dos sumas de comprobación diferentes podrían sumar al mismo valor con bastante facilidad –
¿Cómo se evita el desbordamiento numérico con este enfoque? – Robert