gpt4 book ai didi

mysql - MySQL用户函数中的"Incorrect string value"

转载 作者:行者123 更新时间:2023-11-29 17:52:22 25 4
gpt4 key购买 nike

我需要这个函数在 MySQL 中工作;我已经尝试了几个小时但没有结果。

DELIMITER //
CREATE FUNCTION `generateGUID`(
`playerid` BIGINT
) RETURNS text CHARSET utf8
READS SQL DATA
BEGIN

DECLARE temp text;
DECLARE i int UNSIGNED;

SET temp = '';
SET i = 0;

WHILE i < 8 DO
SET temp = CONCAT(temp, CHAR(playerid & 0xFF));
SET playerid = playerid >> 8;
SET i = i + 1;
END WHILE;

SET temp = MD5(CONCAT("BE", temp));

RETURN temp;

END//
DELIMITER ;

这是一个获取数字(Steam ID)并返回转换后的字符串的函数。

该函数来自 github 存储库,但它很旧,而且作者似乎没有更新它。

我得到:

Error de SQL (1366): Incorrect string value: '\x97' for column 'temp' at row 1

最佳答案

这个函数做什么?它显然计算了 BattlEye ID :

md5("BE" (2 bytes) + 64-bit SteamID (8 bytes))

哪里...

WHILE i < 8 DO
SET temp = CONCAT(temp, CHAR(playerid & 0xFF));
SET playerid = playerid >> 8;
SET i = i + 1;
END WHILE;

...第一个部分是最低有效字节,它最终位于字符串的开头。所以这个数字是“小端”。

这将成为 GUID。

我们可以重建他。我们有技术

生成二进制数据的函数是UNHEX,我们必须向它提供一个用零填充的 16 个字符序列。 LPAD 是我们的 friend 。然后数字是小尾数,然后我们必须使用REVERSE。其余部分如下。

请注意,您根本不需要该函数,只需要核心(返回的对象)。

DROP FUNCTION generateGUID;

DELIMITER //
CREATE FUNCTION `generateGUID`(
`playerid` BIGINT
) RETURNS text CHARSET utf8
READS SQL DATA
BEGIN

RETURN MD5(
CONCAT(
'BE',
REVERSE(
UNHEX(
LPAD(
HEX(playerid),
16,
'0'
)
)
)
)
);

END//
DELIMITER ;

测试:

select generateGUID(76532298015716211) -- found on an online generator

按预期返回 f276e058bbaaff85d23070c9bd43e2aa

关于mysql - MySQL用户函数中的"Incorrect string value",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49199410/

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