Note:
This topic has been translated from a Chinese forum by GPT and might contain errors.Original topic: 想使用tidb把字符串转url编码

[TiDB Usage Environment] Production Environment
[TiDB Version] 5.4.3
[Encountered Problem: Phenomenon and Impact]
I want to create a function that can convert a string to URL encoding. Currently, I have one for MySQL:
DELIMITER $$
CREATE FUNCTION urlencode(str VARCHAR(255)) RETURNS VARCHAR(255)
BEGIN
DECLARE hex_chars VARCHAR(16) DEFAULT '0123456789ABCDEF';
DECLARE encoded_str VARCHAR(255) DEFAULT '';
DECLARE c VARCHAR(1);
DECLARE i INT DEFAULT 1;
WHILE i <= CHAR_LENGTH(str) DO
SET c = SUBSTRING(str, i, 1);
IF LOCATE(c, 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-_.~') > 0 THEN
SET encoded_str = CONCAT(encoded_str, c);
ELSE
SET encoded_str = CONCAT(encoded_str, '%', SUBSTRING(hex_chars, ORD(c) DIV 16 + 1, 1), SUBSTRING(hex_chars, ORD(c) MOD 16 + 1, 1));
END IF;
SET i = i + 1;
END WHILE;
RETURN encoded_str;
END $$
DELIMITER ;
SELECT urlencode('Hello World');
It shows the following:
Hello%20World
I want one for TiDB, or is there a built-in function that can achieve this?