IT

MariaDB가 " " 근처에 있는 구문이 잘못되었습니다.

itgroup 2022. 10. 28. 20:41
반응형

MariaDB가 " " 근처에 있는 구문이 잘못되었습니다.

제목에서 알 수 있듯이 내 구문에 오류가 있습니다.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 Fielle에서 알 수 있듯이 함수 자체는 정상입니다(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;
//

추신: 데이터베이스 성능이 크게 저하되므로 기능을 사용하지 않는 것이 좋습니다.퍼포먼스가 목표인 경우 umlauts가 이미 제거된 값을 사용하여 추가 필드를 생성하여 데이터베이스의 정규화를 수행하는 것이 좋습니다.

또한 mysql 함수를 사용하는 대신 프로그램에서 umlauts를 삭제하는 것이 좋습니다. Unicode는 매우 까다로울 수 있고 umlauts를 다른 방법으로 생성할 수 있기 때문입니다.외부 소스로부터의 수신 데이터를 신뢰하지 않고 신중하게 데이터를 삭제하며 유니코드가 데이터베이스에 저장되기 전에 이미 정규화되었습니다(그렇지 않으면 - 하세요!).

언급URL : https://stackoverflow.com/questions/50025043/mariadb-incorrect-syntax-near

반응형