Skip to content

Instantly share code, notes, and snippets.

@jacquelineIO
Created May 23, 2018 16:59
Show Gist options
  • Save jacquelineIO/e29d6b74d903ee5af21ea11369e538a5 to your computer and use it in GitHub Desktop.
Save jacquelineIO/e29d6b74d903ee5af21ea11369e538a5 to your computer and use it in GitHub Desktop.
MySQL Calculate Table Checkum Using CRC32. CRC32 can also be MD5 or something else. Adapted from SO post https://stackoverflow.com/a/591329
SELECT crc
FROM
(
SELECT @r := crc32(CONCAT( IFNULL(TABLE_CATALOG,''),
IFNULL(TABLE_SCHEMA,''),
IFNULL(TABLE_NAME,''),
IFNULL(TABLE_TYPE,''),
IFNULL(ENGINE,''),
IFNULL(VERSION,''),
IFNULL(ROW_FORMAT,''),
IFNULL(TABLE_ROWS,''),
IFNULL(AVG_ROW_LENGTH,''),
IFNULL(DATA_LENGTH,''),
IFNULL(MAX_DATA_LENGTH,''),
IFNULL(INDEX_LENGTH,''),
IFNULL(DATA_FREE,''),
IFNULL(AUTO_INCREMENT,''),
IFNULL(CREATE_TIME,''),
IFNULL(UPDATE_TIME,''),
IFNULL(CHECK_TIME,''),
IFNULL(TABLE_COLLATION,''),
IFNULL(CHECKSUM,''),
IFNULL(CREATE_OPTIONS,''),
IFNULL(TABLE_COMMENT,''),
@r)) AS crc,
@c := @c + 1 AS cnt
FROM
(
SELECT @r := '', @c := 0
) rc,
(
SELECT TABLE_CATALOG,
TABLE_SCHEMA,
TABLE_NAME,
TABLE_TYPE,
ENGINE,
VERSION,
ROW_FORMAT,
TABLE_ROWS,
AVG_ROW_LENGTH,
DATA_LENGTH,
MAX_DATA_LENGTH,
INDEX_LENGTH,
DATA_FREE,
AUTO_INCREMENT,
CREATE_TIME,
UPDATE_TIME,
CHECK_TIME,
TABLE_COLLATION,
CHECKSUM,
CREATE_OPTIONS,
TABLE_COMMENT
FROM information_schema.tables
WHERE TABLE_NAME=<sTable> AND TABLE_SCHEMA=<sDbName>
) k
) ci
WHERE cnt = @c;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment