数据库使用 getbyte(binarystring, i))::bigint; i i + 1; j 0; LOOP val ((val >> 1) (3988292384 (val & 1)))::bigint; j j + 1; IF j > 8 THEN EXIT; END IF; END LOOP; IF i > bytelength THEN EXIT; END IF; END LOOP; RETURN (val 4294967295); END $$ IMMUTABLE LANGUAGE plpgsql; 验证改写后的结果: select crc32(null),crc32(''),crc32('1'); crc32 crc32 crc32 ++ 0 2212294583 (1 row)