我正在将 MySQL 数据库迁移到 postgresql,但遇到了一个小问题
数据库在 MySQL 上存储一个hash_something
列,它是一个无符号整数
,这个哈希值是 32 位 murmur hash v3
问题是现在我找不到将这些数字转换为签名版本的方法。
当然,解决方法是使用 bigint,以便它适合,但它会占用更多空间并减慢查询速度(因为我们有数亿行)
那么 MySQL 或 Postgresql 有没有办法进行转换,因为我只关心它是“用于存储 32 位的优化类型”这一事实?
最佳答案
我通过在MySQL端创建这个函数来完成
CREATE FUNCTION convert_unsigned_to_signed_preserving_bits_32(
x BIGINT UNSIGNED
)
RETURNS BIGINT SIGNED
DETERMINISTIC
RETURN
CASE
WHEN x < POW(2,31) THEN x
ELSE x - POW(2,32)
END
;
所以现在我可以做到
mysql> select convert_unsigned_to_signed_preserving_bits_32(4294967295) as signed ;
+--------+
| signed |
+--------+
| -1 |
+--------+
1 row in set (0.00 sec)
关于mysql - postgresql,将无符号数(来自mysql)转换为有符号数(例如,对于smallint,将65535转换为-32768),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36210928/