반응형
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
반응형
'IT' 카테고리의 다른 글
C 헤더 파일을 작성하려면 어떻게 해야 합니까? (0) | 2022.10.28 |
---|---|
MySQL: 필드별 주문, 끝에 빈 셀 배치 (0) | 2022.10.28 |
어떻게 하면 짧은 비단뱀 목록을 추가할 수 있나요? (0) | 2022.10.28 |
React.js의 상태 어레이를 올바르게 수정 (0) | 2022.10.19 |
PHP의 cURL POST HTTP 요청에 Authorization 헤더를 포함하려면 어떻게 해야 합니까? (0) | 2022.10.19 |