想使用tidb把字符串转url编码

【 TiDB 使用环境】生产环境
【 TiDB 版本】5.4.3
【遇到的问题:问题现象及影响】
想创建一个函数,可以把字符串转url编码,现在有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');

显示如下

Hello%20World

想要一个tidb的,或者有没有现成内置函数可以实现

tidb不支持函数,用python实现吧。。。

import urllib.parse

# 待转换的字符串
original_string = "Hello world"

# 将字符串转为 URL 编码
url_encoded_string = urllib.parse.quote(original_string)

# 打印结果
print("原始字符串:", original_string)
print("URL 编码后:", url_encoded_string)

不能行,因为要用kettle同步数据,只能在数据库层想办法

同步数据到什么地方?

从一个接口同步到数据库,但是那个接口的入参需要把参数转成url编码,因为kettle不支持,所以想的是用数据库转成url编码,然后再传入接口中

没有理解,现在tidb是源端吗?目标端是什么数据库?

貌似kettle支持url编码,我用kettle实现吧,多谢了

1 个赞

kettle适合干这个。是个好的选择

Tidb 不支持UDF函数、存储过程 ,用其他脚本语言吧

此话题已在最后回复的 60 天后被自动关闭。不再允许新回复。