You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Redshift与MySQL CRC32输出不一致,如何转换为统一整数?

解决Redshift CRC32结果转MySQL风格无符号整数的问题

问题核心

你用错了转换基数:Redshift的CRC32返回的是十六进制字符串(对应基数16),但你调用STRTOL时指定了基数32,这是错误的根本原因。

正确转换方式

直接使用基数16解析Redshift的CRC32结果即可得到和MySQL一致的无符号整数:

SELECT STRTOL(CRC32('abc'), 16);

执行这条语句会返回891568578,和MySQL中SELECT CRC32('abc');的输出完全匹配。

特殊情况处理

如果遇到CRC32结果的十六进制字符串最高位为8-f(对应32位无符号数中超过2^31-1的情况),Redshift的STRTOL会将其解析为有符号负数。此时需要通过加上2^32来转换为无符号整数:

SELECT 
    CASE 
        WHEN STRTOL(CRC32('your_string'), 16) < 0 
        THEN STRTOL(CRC32('your_string'), 16) + POWER(2, 32) 
        ELSE STRTOL(CRC32('your_string'), 16) 
    END AS mysql_compatible_crc32;

原理说明

Redshift的CRC32返回的8字符字符串是32位二进制序列的十六进制形式,与MySQL返回的32位无符号整数是同一数值的不同表示,只需用对应基数解析即可完成转换。

内容的提问来源于stack exchange,提问作者Oğuzhan Akan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 20:52:13