mysql: внедрить функцию в запрос - PullRequest
0 голосов
/ 17 мая 2011

У меня есть база данных, которая хранит геоданные, такие как страны, города.я хотел бы использовать modrewrite со ссылками, такими как: mysite.com/europe/austria/vienna

теперь проблема: в немецком языке некоторые страны содержат умлауты, такие как австрия = österreich (я не могу использовать умлауты в URL)

поэтому мой вопрос: есть ли способ создать внутри базы данных функцию, которая заменяет все специальные символы при запросах типа "где validUrl (country) = 'oesterreich'?", Которая заменит ö-> oe

Моя единственная идея на данный момент - добавить дополнительное поле базы данных для modrewrite, которое будет содержать "oesterreich"

Любые идеи? Спасибо

Ответы [ 2 ]

1 голос
/ 17 мая 2011

Вы можете создать функцию в 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

1 голос
/ 17 мая 2011

Это не поможет вам, потому что, хотя вы можете заменить ü на u на немецком языке, вы не можете делать такие вещи с диакритическими знаками на других языках. Однако вы можете закодировать эти символы, чтобы они действовали в URL. См. urlencode и urldecode для этого.

Кроме того, когда вы устанавливаете параметры сортировки столбца в unicode_ci, вы должны иметь возможность выбирать похожие строки, поэтому WHERE YourField = 'enquête' также должно соответствовать 'enquete'. «österreich», вероятно, будет соответствовать «osterreich», но не «oesterreich». MySQL, вероятно, недостаточно умен, чтобы знать, французское это или немецкое слово.

Вы можете выбрать определенную немецкую сортировку, но это не будет соответствовать вашей цели. Еще может быть интересно прочитать этот текст о сопоставлениях , поскольку он показывает разницу между двумя немецкими сопоставлениями.

...