Search code examples
phpmysqlsqldatabasechecksum

MySQL rows checksum


Is it possible to select entire row in a table and get sort of checksum? I am looking for a way to tell my code to update data only if at least one record has been changed. From perspective of data changes tracking it would help me to size down a number of changes noted in history table.


Solution

  • You can combine the MD5() and CONCAT() functions to generate an MD5 checksum for the row:

    SELECT MD5(CONCAT(col1, col2, col3, ...)) as MD5_checksum FROM table;
    

    If one of the columns is nullable, be sure you wrap it in IFNULL(col, ''), as a null will make the result of the CONCAT() also null.

    Also be aware that this is not 100% safe. If you remove the 1 character from a column and add it as the first character of the next column, the outcome of the CONCAT() and thus of the MD5 hash will be the same.