gpt4 book ai didi

mysql - 在 MySQL 中将存储的 md5 字符串转换为十进制值

转载 作者:行者123 更新时间:2023-12-01 10:40:33 37 4
gpt4 key购买 nike

我在 MySQL 中有一个非常大的表。我正在使用一个 CHAR(32) 字段,它当然包含一个 MD5 作为字符串。我遇到了一个问题,我需要使用 MySQL 将其转换为十进制值。第三方工具运行查询,因此编写代码来执行此操作并不是一个真正的选择。

MySQL 确实支持本地存储十六进制值并将它们转换为整数。但是它会挂断从字符串转换它。这是我到目前为止所尝试的(md5_key 是我的专栏的名称)

首先,我只是尝试了 UNHEX 函数,但它返回一个字符串,所以它给了我 gooblygoop。我不会把它放在这里。接下来我尝试了 CAST 功能

SELECT CAST( CONCAT('0x',md5_key) AS UNSIGNED ) FROM bigtable limit 1

结果 = 0
显示警告给我:“截断不正确的整数值:'0x000002dcc38af6f209e91518db3e79d3'”

但是如果我这样做:
SELECT CAST( 0x000002dcc38af6f209e91518db3e79d3 AS UNSIGNED );

我得到正确的十进制值。

所以我想我需要知道的是,有没有办法让 MySQL 将该字符串视为十六进制值? (我也尝试将其转换为 BINARY 然后转换为 UNSIGNED 但这也不起作用)。

提前致谢!

最佳答案

conv() 仅限于 64 位整数。您可以将高低部分转换为十进制,然后将它们相加:

> select cast(conv(substr("000002dcc38af6f209e91518db3e79d3", 1, 16), 16, 10) as
decimal(65))*18446744073709551616 +
cast(conv(substr("000002dcc38af6f209e91518db3e79d3", 17, 16), 16, 10) as
decimal(65));
58055532535286745202684464101843

其中 18446744073709551616 = 2^64。所以在你的情况下:
> select cast(conv(substr(md5_key, 1, 16), 16, 10) as 
decimal(65))*18446744073709551616 +
cast(conv(substr(md5_key, 17, 16), 16, 10) as
decimal(65))
from bigtable limit 1;

关于mysql - 在 MySQL 中将存储的 md5 字符串转换为十进制值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1924850/

37 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com