CREATEFUNCTION urlencode(str VARCHAR(4096)CHARSET utf8)RETURNSvarchar(4096)CHARSET utf8
BEGINDECLARE sub VARCHAR(1)CHARSET utf8;DECLARE val BIGINTDEFAULT0;DECLARE ind INTDEFAULT1;DECLARE oct INTDEFAULT0;DECLARE ret VARCHAR(4096)DEFAULT'';DECLARE octind INTDEFAULT0;IF str isNULLTHENRETURNNULL;ELSESET ret ='';WHILE ind <= CHAR_LENGTH(str)DOSET sub =MID(str, ind,1);SET val = ORD(sub);IFNOT(val BETWEEN48AND57OR
val BETWEEN65AND90OR
val BETWEEN97AND122OR
val IN(45,46,95,126))THENSET octind = OCTET_LENGTH(sub);WHILE octind >0DOSET oct =(val >>(8*(octind -1)));SET ret = CONCAT(ret,'%', LPAD(HEX(oct),2,0));SET val =(val &(POWER(256,(octind -1))-1));SET octind =(octind -1);ENDWHILE;ELSESET ret = CONCAT(ret, sub);ENDIF;SET ind =(ind +1);ENDWHILE;ENDIF;RETURN ret;END