I am creating crc32 in PHP and should store it in a field in a MySQL database. After reading about how a problem arises with the results on a 32-bit or 64-bit machine, I wonder how this number should be stored. This is how I handle crc32 in PHP to get the same result on a machine with bitrate:
<?php $checksum = crc32("The quick brown fox jumped over the lazy dog."); // On a 32-bit system it prints -2103228862 instead of // 2191738434 which is correct and what prints on a 64-bit system. // See the php.net manual page on crc32 for more information about // 32-bit vs 64-bit. echo "checksum without printf formatting: " . $checksum . "\n"; printf("%u\n", $checksum); $string = sprintf("%u", $checksum); echo $string . "\n"; ?>
Output (on a 64-bit machine):
checksum without printf formatting: 2191738434 2191738434 2191738434
How should this number be stored in MySQL? Here are a few options that I have come up with so far:
`hash1` CHAR(10) NOT NULL , `hash2` varchar(32) NOT NULL, `hash3` int unsigned NOT NULL,
Looks like I should go with:
`hash4` BIGINT UNSIGNED NOT NULL ,
source share