2011-05-16 2 views
0

저는 국가, 도시와 같은 지리 데이터를 저장하는 데이터베이스를 가지고 있습니다. 지금 mysite.com/europe/austria/viennamysql : 쿼리를 함수로 구현하십시오.

문제 : 내가 좋아하는 링크 modrewrite 사용하고자하는 독일어, 일부 국가 (나는 URL을에 움라우트를 사용할 수 없습니다 Österreich는 오스트리아 = 같은 움라우트를 포함)

그래서 내 질문 : 같이 쿼리 할 때 모든 특수 문자를 대체 데이터베이스 내부의 함수를 작성하는 방법이 "여기서 validUrl (국가) = 'oesterreich' 대체 할 것이다 O-> OE

내 유일한 아이디어는 지금까지 modrewrite에 대한 추가 데이터베이스 필드를 추가하는 것입니다. 개최 "oesterreich"

어떤 아이디어? 덕분에

+0

그래서 O-> OE 항상, 아니면 그냥 독일어? 다른 언어/억양은? –

+0

그것은 모든 특수 문자를 대체 할 수있는 모든 쿼리에 대해 전역 함수 여야합니다. – Fuxi

+0

@Ben, 63 %는 나빠 보이지 않으며, Fuxi는 단지 'correct'가 그와 아무런 관련이 없다고 대답합니다. – Johan

답변

1

당신은 @GolezTrol 말했다 그러나,이 때문에 다른 언어의 발음 구별 부호의 좋은 생각이 아니다 그래서

DELIMITER $$ 

CREATE FUNCTION UmlautRaus(input varchar) RETURNS varchar 
BEGIN 
    declare output varchar; 

    SET output = REPLACE(input,'ü','ue'); 
    SET output = REPLACE(output,..... 
    .... 
    RETURN output; 
END $$ 

DELIMITER ; 

처럼 MySQL의에서 함수를 만들 수 있습니다.

링크 : http://dev.mysql.com/doc/refman/5.1/en/string-functions.html

+0

덕분에 그것이 내가 필요한 것입니다! :)) 나는 위에서 설명한 목적으로 만 다른 언어를 필요로하므로 다른 언어는 신경 쓰지 않습니다. 문자열을 소문자로 처리하는 것과 관련하여 더 많은 정보를 얻을 수 있습니까? – Fuxi

1

독일어로 ü를 ue로 대체 할 수 있지만 다른 언어의 발음 구별 부호로는 그런 일을 할 수 없으므로 도움이되지 않습니다. 그러나 이러한 문자가 URL에서 유효하도록 인코딩 할 수 있습니다. 이에 대해서는 urlencode과 urldecode를 참조하십시오.

또한 열의 데이터 정렬을 unicode_ci로 설정하면 유사한 문자열을 선택할 수 있어야하므로 WHERE YourField = 'enquête'도 'enquete'와 일치해야합니다. 'Österreich'는 아마도 'osterreich'와 일치하지만 'oesterreich'와는 일치하지 않습니다. MySQL은 아마도이 단어가 프랑스어인지 독일어인지를 알기에 현명하지 못합니다.

특별히 독일어 데이터 정렬을 선택할 수는 있지만 이는 목표에 맞지 않습니다. this text on collations을 읽는 것이 여전히 흥미로울 수 있습니다. 두 개의 독일어 조합 간의 차이점을 보여주기 때문입니다.