Я хочу вычислить контрольную сумму всех значений столбца в совокупности.Создать совокупную контрольную сумму столбца
Другими словами, я хочу сделать некоторые эквивалент
md5(group_concat(some_column))
Проблема с этим подходом является:
- Это неэффективно. Он должен конкатрировать все значения столбца в виде строки в некотором временном хранилище, прежде чем передать его функции md5.
- group_concat имеет максимальную длину 1024, после чего все остальное будет усечено.
(В случае, если вам интересно, вы можете быть уверены, что CONCAT значений в последовательном порядке, однако, как считают это или нет GROUP_CONCAT() принимает заказ пунктом в нем, например, group_concat(some_column order by some_column)
)
MySQL предлагает нестандартные побитовые агрегированные функции BIT_AND(), BIT_OR() и BIT_XOR(), которые, как я полагаю, были бы полезны для этой проблемы. Столбец является числовым в этом случае, но мне было бы интересно узнать, есть ли способ сделать это со строковыми столбцами.
Для этого конкретного приложения контрольная сумма не должна быть криптологически безопасной.
'SUM()' Неправильно использовать здесь, поскольку две различные контрольные суммы могут свести к одному и тому же значению довольно легко. –
Как вы избегаете числового переполнения с помощью этого подхода? – Robert