MariaDB '' 附近的语法不正确

MariaDB incorrect syntax near ''

正如标题所说,我的语法某处有错误。这是 MariaDB 10.1.31。

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');
    SET TextString = REPLACE(TextString, 'ö', 'o');
    SET TextString = REPLACE(TextString, 'ẅ', 'w');
    SET TextString = REPLACE(TextString, 'ß', 'b');
    SET TextString = REPLACE(TextString, 'ü', 'u');
    SET TextString = REPLACE(TextString, 'ẍ', 'x');
    SET TextString = REPLACE(TextString, 'ÿ', 'y');
    RETURN TextString;
END;

和错误:

 You have an error in your SQL syntax;
 check the manual that corresponds to your MariaDB server version
 for the right syntax to use near '' at line 3.

到目前为止,我尝试了文档中的一个函数,但语法也有错误。我正在 HeidiSQL 9.5.0.5196 中执行此查询。

我认为您只需要 DELIMITER 个语句。

函数本身没问题,如此SQL Fiddle所示(MariaDB和MySQL在这个目的上是一样的)。

尝试添加:

 DELIMITER $$

 <your function definition>

 DELIMITER ;

可行的解决方案:

DROP FUNCTION IF EXISTS NO_UMLAUT;

DELIMITER //
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');
    SET TextString = REPLACE(TextString, 'ö', 'o');
    SET TextString = REPLACE(TextString, 'ẅ', 'w');
    SET TextString = REPLACE(TextString, 'ß', 'b');
    SET TextString = REPLACE(TextString, 'ü', 'u');
    SET TextString = REPLACE(TextString, 'ẍ', 'x');
    SET TextString = REPLACE(TextString, 'ÿ', 'y');
    RETURN TextString;
END;
//

P.S。我建议避免使用函数,因为它会大大降低数据库性能。如果您的目标是性能,那么最好通过创建额外的字段来执行数据库的 非规范化,其中的值已经删除了变音符号。

最好在您的程序中删除变音符号而不是使用 mysql 函数,因为 unicode 可能非常棘手,并且可以使用不同的方法创建变音符号。我希望你不信任来自外部来源的传入数据,你正在仔细清理它并且你的 unicode 在它被放入数据库之前已经规范化(如果没有 - 做吧!)。