MariaDB 10.1.31创建NO_UMLAUT函数时出现语法错误求助
排查MariaDB 10.1.31中NO_UMLAUT自定义函数的语法错误
我帮你梳理下这个自定义函数的语法问题,主要有两个核心问题需要修正:
1. 语句分隔符冲突
MariaDB默认使用;作为语句结束符,但你的函数体内部每个SET语句都用了;,这会导致数据库误以为函数定义在第一个SET语句后就结束了,直接抛出语法错误。解决办法是先临时修改语句分隔符,等函数创建完成后再改回默认值。
2. 函数体未完整闭合
你提供的代码最后是TextStri...,明显是代码被截断了——不仅缺少了剩余的替换逻辑,还没写函数结束的END;语句,同时也遗漏了返回处理后字符串的RETURN语句,这些都会导致语法校验失败。
修正后的完整代码示例
-- 临时修改分隔符为$$,避免和函数体内的;冲突 DELIMITER $$ DROP FUNCTION IF EXISTS NO_UMLAUT$$ CREATE FUNCTION NO_UMLAUT(TextString VARCHAR(255)) RETURNS VARCHAR(255) BEGIN SET TextString = REPLACE(TextString, 'ä', 'a'); SET TextString = REPLACE(TextString, 'ë', 'e'); SET TextString = REPLACE(TextString, 'ḧ', 'h'); SET TextString = REPLACE(TextString, 'n̈', 'n'); SET TextString = REPLACE(TextString, 'ï', 'i'); SET TextString = REPLACE(TextString, 'ẗ', 't'); -- 如果还有其他带变音符号的字符需要替换,继续在这里补充 RETURN TextString; -- 返回最终处理后的字符串 END$$ -- 改回默认的语句分隔符; DELIMITER ;
额外注意事项
- 确保你的数据库账号拥有
CREATE ROUTINE权限,否则会创建失败; - 如果你的字符串包含特殊变音符号,建议确保数据库、表以及连接的字符集为
utf8mb4,避免字符替换时出现乱码或匹配失败的情况; - MariaDB 10.1版本已经停止维护,后续如果有条件建议升级到更稳定的新版本,获得更好的兼容性和安全性。
内容的提问来源于stack exchange,提问作者shaelex
相关产品推荐
相关产品推荐

