mysql - postgresql,将无符号数(来自mysql)转换为有符号数(例如,对于smallint,将65535转换为-32768)

标签 mysql postgresql

我正在将 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/

相关文章:

python - 从文件中读取并将值作为sql中的参数传递

mysql - 查询以查找是否存在较大集合的子集的行

postgresql - Heroku 托管 PostgreSQL 和 PLV8

sql - 用于展平一行中多个属性的简单 SQL 查询

sql - 更新以特定字符串开头的多个列

r - dplyr 自动断开 postgres 连接问题

php - 将 SQLite 数据库放入 JSON 对象中以从 iOS 发送到服务器

php - 如何通过模态向mysql插入数据

MySQL插入: Column 'description' cannot be null but there is no column with name 'description'

ruby - 如何使用 Ruby 处理来自 Postgres 的 "incomplete multibyte character"错误?