Рабочее решение:
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;
//
PS Я бы рекомендовал избегать использования функций, так как это резко снижает производительность базы данных.Если ваша цель - производительность, то было бы лучше выполнить денормализацию вашей базы данных, создав дополнительные поля с уже удаленными значениями umlauts.
Было бы также лучше удалитьУмлауты в вашей программе вместо использования функции mysql в качестве юникода могут быть очень хитрыми, и умлауты могут быть созданы с использованием разных подходов.Я надеюсь, что вы не доверяете входящим данным из внешних источников, вы тщательно их дезинфицируете, и ваш юникод уже был нормализован до того, как был помещен в базу данных (если нет - сделайте это!).