2011-05-16 103 views
0

我有一個數據庫存儲地理數據,如國家,城市。 我想與像鏈路使用modrewrite: mysite.com/europe/austria/viennamysql:實現查詢功能

現在的問題:在德國,一些國家包括變音如奧地利=österreich (我不能在URL中使用日爾曼)

所以我的問題:? 有沒有方法來創建查詢就像當它取代所有特殊字符數據庫裏面的函數「,其中validUrl(國家)=‘oesterreich’ 將取代鄰> OE

我到目前爲止唯一的想法是爲modrewrite添加一個額外的數據庫字段,舉行「oesterreich」

任何想法?謝謝

+0

所以ö-> oe總是,還是隻爲德國人?和其他語言/口音? – 2011-05-16 22:40:02

+0

它應該是一個全局函數,我可以替換所有特殊字符。 – Fuxi 2011-05-16 22:41:54

+0

@Ben,63%看起來不錯,Fuxi只是想'正確'答案沒有錯。 – Johan 2011-05-16 23:02:28

回答

1

你可以在MySQL中創建一個函數,像這樣

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 ; 

然而,隨着@GolezTrol說,這並不是因爲其他語言的變音符號的一個偉大的想法。

鏈接:http://dev.mysql.com/doc/refman/5.1/en/string-functions.html

+0

感謝這就是我所需要的! :)) 我不關心其他語言,因爲我只需要它用於上述目的。我在哪裏可以得到更多關於字符串操作的信息,比如字符串變爲小寫? – Fuxi 2011-05-16 23:15:10

1

它不會幫助你,因爲儘管你可以用德語替換ü,但是你不能用其他語言的變音符號來做這些事情。但是,您可以對這些字符進行編碼,使其在url中有效。請參閱urlencode和urldecode。

此外,當您將列的排序規則設置爲unicode_ci時,您應該能夠選擇相似的字符串,因此WHERE YourField = 'enquête'也應與'enquete'匹配。 'österreich'可能會匹配'osterreich',但不匹配'oesterreich'。 MySQL可能不夠聰明,無法知道這個詞是法語還是德語。

您可以選擇德國專門的排序規則,但這不符合您的目標。讀取this text on collations可能仍然很有趣,因爲它顯示了兩個德語歸類之間的差異。